diff --git a/LICENSE b/LICENSE index 264ecfb3..dba0a0b2 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ - MIT License - - Copyright (c) 2018 Harrison Pielke-Lombardo - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + MIT License + + Copyright (c) 2018 Harrison Pielke-Lombardo + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/TODO b/TODO index 6937b159..fb45d294 100644 --- a/TODO +++ b/TODO @@ -1,23 +1,23 @@ -TODO: Add load errors -TODO: Remove default graph -TODO: Make sure owlClass part is never set to null (i.e. when the annotation owl class has yet to be set) -TODO: Icons: add distinguishing marks for spans vs annoations -TODO: Implement owl model manager listeners and renderer change listeners -TODO: Quantifier and value as persistent text boxes -TODO: Should probably also read in Events, Modifiers, etc. -TODO: Prescribe colors (Colorbrewer qualitative), but allow the adding of new colors -TODO: Edge coloring -TODO: Regex search -TODO: Expand and collapse by sentence -TODO: Toggle expand to show ontology terms as separate nodes -TODO: Edit coreference annotation -TODO: Labels not overlapping -TODO: Separators -TODO: Undo: either save state or do reverse actions -TODO: No empty string values for property specifications (value, etc.) -TODO: Save project saves ontology too -TODO: Autoload the AO or at least provide the functionality to convert to it if desired. -TODO: Add annotations as subclasses of their assigned classes as well as of the AO -TODO: Server based collaboration -TODO: Annotation suggestions -TODO: JavaScript graph viz +TODO: Add load errors +TODO: Remove default graph +TODO: Make sure owlClass part is never set to null (i.e. when the annotation owl class has yet to be set) +TODO: Icons: add distinguishing marks for spans vs annoations +TODO: Implement owl model manager listeners and renderer change listeners +TODO: Quantifier and value as persistent text boxes +TODO: Should probably also read in Events, Modifiers, etc. +TODO: Prescribe colors (Colorbrewer qualitative), but allow the adding of new colors +TODO: Edge coloring +TODO: Regex search +TODO: Expand and collapse by sentence +TODO: Toggle expand to show ontology terms as separate nodes +TODO: Edit coreference annotation +TODO: Labels not overlapping +TODO: Separators +TODO: Undo: either save state or do reverse actions +TODO: No empty string values for property specifications (value, etc.) +TODO: Save project saves ontology too +TODO: Autoload the AO or at least provide the functionality to convert to it if desired. +TODO: Add annotations as subclasses of their assigned classes as well as of the AO +TODO: Server based collaboration +TODO: Annotation suggestions +TODO: JavaScript graph viz diff --git a/pom.xml b/pom.xml index 7a045389..e02c06fe 100644 --- a/pom.xml +++ b/pom.xml @@ -1,258 +1,258 @@ - - - - 4.0.0 - - - org.sonatype.oss - oss-parent - 7 - - - edu.ucdenver.ccp - knowtator - 2.0.8 - Knowtator - A plug-in for the Protege Desktop ontology editor for editing in-text annotations - https://github.com/UCDenver-ccp/Knowtator-2.0 - - - - Harrison Pielke-Lombardo - harrison.pielke-lombardo@ucdenver.edu - - - - bundle - - - 1.8 - - - - - edu.stanford.protege - protege-common - 5.0.0-RC1 - - - edu.stanford.protege - protege-editor-core - 5.0.0-RC1 - - - edu.stanford.protege - protege-editor-owl - 5.0.0-RC1 - - - org.slf4j - slf4j-api - 1.7.12 - - - net.sourceforge.owlapi - owlapi-api - 5.1.3 - - - edu.stanford.protege - org.protege.editor.owl - 5.0.0-beta-05-SNAPSHOT - - - com.github.jgraph - jgraphx - v3.9.1 - - - - - - junit - junit - 5.0-SNAPSHOT - - - - - - - - - - - - - - - - - - jitpack.io - https://jitpack.io - - - - - - - - - - src/main/resources - true - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.3 - - 1.8 - 1.8 - - - - - org.apache.felix - maven-bundle-plugin - 3.0.0 - true - - - Knowtator Plugin - protege - A plugin for annotating text - org.protege.editor.owl.ProtegeOWL - .,{maven-dependencies},jdom-1.0-fixed.jar - ${project.artifactId};singleton:=true - The Protege Development Team - * - - jgraphx - README.md, - plugin.xml, - installation_image.PNG, - {maven-resources} - - - - skeleton - - - - - bundle-manifest - install - - manifest - - - - - - org.apache.maven.plugins - maven-dependency-plugin - 3.0.2 - - - - - - - - - - - - - - - - - - - - - - - copy-installed - install - - copy - - - - - ${project.groupId} - ${project.artifactId} - ${project.version} - ${project.packaging} - - - ${env.PROTEGE_HOME}/plugins/ - - - - - - maven-eclipse-plugin - 2.9 - - true - false - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + 4.0.0 + + + org.sonatype.oss + oss-parent + 7 + + + edu.ucdenver.ccp + knowtator + 2.0.8 + Knowtator + A plug-in for the Protege Desktop ontology editor for editing in-text annotations + https://github.com/UCDenver-ccp/Knowtator-2.0 + + + + Harrison Pielke-Lombardo + harrison.pielke-lombardo@ucdenver.edu + + + + bundle + + + 1.8 + + + + + edu.stanford.protege + protege-common + 5.0.0-RC1 + + + edu.stanford.protege + protege-editor-core + 5.0.0-RC1 + + + edu.stanford.protege + protege-editor-owl + 5.0.0-RC1 + + + org.slf4j + slf4j-api + 1.7.12 + + + net.sourceforge.owlapi + owlapi-api + 5.1.3 + + + edu.stanford.protege + org.protege.editor.owl + 5.0.0-beta-05-SNAPSHOT + + + com.github.jgraph + jgraphx + v3.9.1 + + + + + + junit + junit + 5.0-SNAPSHOT + + + + + + + + + + + + + + + + + + jitpack.io + https://jitpack.io + + + + + + + + + + src/main/resources + true + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.8 + 1.8 + + + + + org.apache.felix + maven-bundle-plugin + 3.0.0 + true + + + Knowtator Plugin + protege + A plugin for annotating text + org.protege.editor.owl.ProtegeOWL + .,{maven-dependencies},jdom-1.0-fixed.jar + ${project.artifactId};singleton:=true + The Protege Development Team + * + + jgraphx + README.md, + plugin.xml, + installation_image.PNG, + {maven-resources} + + + + skeleton + + + + + bundle-manifest + install + + manifest + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.0.2 + + + + + + + + + + + + + + + + + + + + + + + copy-installed + install + + copy + + + + + ${project.groupId} + ${project.artifactId} + ${project.version} + ${project.packaging} + + + ${env.PROTEGE_HOME}/plugins/ + + + + + + maven-eclipse-plugin + 2.9 + + true + false + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/KnowtatorController.java b/src/main/java/edu/ucdenver/ccp/knowtator/KnowtatorController.java index 9877e61c..1f0d0b65 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/KnowtatorController.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/KnowtatorController.java @@ -1,138 +1,138 @@ -package edu.ucdenver.ccp.knowtator; - -import edu.ucdenver.ccp.knowtator.listeners.DebugListener; -import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; -import edu.ucdenver.ccp.knowtator.model.*; -import edu.ucdenver.ccp.knowtator.model.owl.OWLAPIDataExtractor; -import org.apache.log4j.Logger; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import java.io.File; -import java.io.Writer; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; -import java.util.prefs.Preferences; - -public class KnowtatorController implements Savable, ProjectListener { - @SuppressWarnings("unused") - private static final Logger log = Logger.getLogger(KnowtatorController.class); - - private final Preferences prefs = Preferences.userRoot().node("knowtator"); - private ProjectManager projectManager; - private TextSourceManager textSourceManager; - private ProfileManager profileManager; - private SelectionManager selectionManager; - private OWLAPIDataExtractor owlDataExtractor; - private TreeMap idRegistry; - private List debugListeners; - - public KnowtatorController() { - idRegistry = new TreeMap<>(); - debugListeners = new ArrayList<>(); - projectManager = new ProjectManager(this); // reads and writes to XML - owlDataExtractor = new OWLAPIDataExtractor(this); - selectionManager = new SelectionManager(this); - textSourceManager = new TextSourceManager(this); - profileManager = new ProfileManager(this); // manipulates profiles and colors - - projectManager.addListener(this); - } - - public static void main(String[] args) {} - - public ProfileManager getProfileManager() { - return profileManager; - } - - public ProjectManager getProjectManager() { - return projectManager; - } - - /** GETTERS */ - public OWLAPIDataExtractor getOWLAPIDataExtractor() { - return owlDataExtractor; - } - - public TextSourceManager getTextSourceManager() { - return textSourceManager; - } - - public SelectionManager getSelectionManager() { - return selectionManager; - } - - public Preferences getPrefs() { - return prefs; - } - - @Override - public void writeToKnowtatorXML(Document dom, Element parent) { - profileManager.writeToKnowtatorXML(dom, parent); - textSourceManager.writeToKnowtatorXML(dom, parent); - } - - @Override - public void readFromKnowtatorXML(File file, Element parent) { - profileManager.readFromKnowtatorXML(file, parent); - textSourceManager.readFromKnowtatorXML(file, parent); - } - - @Override - public void readFromOldKnowtatorXML(File file, Element parent) { - profileManager.readFromOldKnowtatorXML(file, parent); - textSourceManager.readFromOldKnowtatorXML(file, parent); - } - - @Override - public void readFromBratStandoff( - File file, Map> annotationMap, String content) {} - - @Override - public void writeToBratStandoff(Writer writer) {} - - @Override - public void readFromGeniaXML(Element parent, String content) {} - - @Override - public void writeToGeniaXML(Document dom, Element parent) {} - - public void verifyId(String id, KnowtatorObject obj, Boolean hasPriority) { - String verifiedId = id; - if (hasPriority && idRegistry.keySet().contains(id)) { - verifyId(id, idRegistry.get(id), false); - } else { - int i = idRegistry.size(); - while (verifiedId == null || idRegistry.keySet().contains(verifiedId)) { - if (obj.getTextSource() != null) { - verifiedId = obj.getTextSource().getId() + "-" + Integer.toString(i); - } else { - verifiedId = Integer.toString(i); - } - i++; - } - } - idRegistry.put(verifiedId, obj); - obj.setId(id == null ? verifiedId : id); - } - - @Override - public void projectClosed() { - idRegistry.clear(); - } - - @Override - public void projectLoaded() { - - } - - public void setDebug() { - debugListeners.forEach(DebugListener::setDebug); - } - - public void addDebugListener(DebugListener listener) { - debugListeners.add(listener); - } -} +package edu.ucdenver.ccp.knowtator; + +import edu.ucdenver.ccp.knowtator.listeners.DebugListener; +import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; +import edu.ucdenver.ccp.knowtator.model.*; +import edu.ucdenver.ccp.knowtator.model.owl.OWLAPIDataExtractor; +import org.apache.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import java.io.File; +import java.io.Writer; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.prefs.Preferences; + +public class KnowtatorController implements Savable, ProjectListener { + @SuppressWarnings("unused") + private static final Logger log = Logger.getLogger(KnowtatorController.class); + + private final Preferences prefs = Preferences.userRoot().node("knowtator"); + private ProjectManager projectManager; + private TextSourceManager textSourceManager; + private ProfileManager profileManager; + private SelectionManager selectionManager; + private OWLAPIDataExtractor owlDataExtractor; + private TreeMap idRegistry; + private List debugListeners; + + public KnowtatorController() { + idRegistry = new TreeMap<>(); + debugListeners = new ArrayList<>(); + projectManager = new ProjectManager(this); // reads and writes to XML + owlDataExtractor = new OWLAPIDataExtractor(this); + selectionManager = new SelectionManager(this); + textSourceManager = new TextSourceManager(this); + profileManager = new ProfileManager(this); // manipulates profiles and colors + + projectManager.addListener(this); + } + + public static void main(String[] args) {} + + public ProfileManager getProfileManager() { + return profileManager; + } + + public ProjectManager getProjectManager() { + return projectManager; + } + + /** GETTERS */ + public OWLAPIDataExtractor getOWLAPIDataExtractor() { + return owlDataExtractor; + } + + public TextSourceManager getTextSourceManager() { + return textSourceManager; + } + + public SelectionManager getSelectionManager() { + return selectionManager; + } + + public Preferences getPrefs() { + return prefs; + } + + @Override + public void writeToKnowtatorXML(Document dom, Element parent) { + profileManager.writeToKnowtatorXML(dom, parent); + textSourceManager.writeToKnowtatorXML(dom, parent); + } + + @Override + public void readFromKnowtatorXML(File file, Element parent) { + profileManager.readFromKnowtatorXML(file, parent); + textSourceManager.readFromKnowtatorXML(file, parent); + } + + @Override + public void readFromOldKnowtatorXML(File file, Element parent) { + profileManager.readFromOldKnowtatorXML(file, parent); + textSourceManager.readFromOldKnowtatorXML(file, parent); + } + + @Override + public void readFromBratStandoff( + File file, Map> annotationMap, String content) {} + + @Override + public void writeToBratStandoff(Writer writer) {} + + @Override + public void readFromGeniaXML(Element parent, String content) {} + + @Override + public void writeToGeniaXML(Document dom, Element parent) {} + + public void verifyId(String id, KnowtatorObject obj, Boolean hasPriority) { + String verifiedId = id; + if (hasPriority && idRegistry.keySet().contains(id)) { + verifyId(id, idRegistry.get(id), false); + } else { + int i = idRegistry.size(); + while (verifiedId == null || idRegistry.keySet().contains(verifiedId)) { + if (obj.getTextSource() != null) { + verifiedId = obj.getTextSource().getId() + "-" + Integer.toString(i); + } else { + verifiedId = Integer.toString(i); + } + i++; + } + } + idRegistry.put(verifiedId, obj); + obj.setId(id == null ? verifiedId : id); + } + + @Override + public void projectClosed() { + idRegistry.clear(); + } + + @Override + public void projectLoaded() { + + } + + public void setDebug() { + debugListeners.forEach(DebugListener::setDebug); + } + + public void addDebugListener(DebugListener listener) { + debugListeners.add(listener); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/events/AnnotationChangeEvent.java b/src/main/java/edu/ucdenver/ccp/knowtator/events/AnnotationChangeEvent.java index d67eb507..1e341908 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/events/AnnotationChangeEvent.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/events/AnnotationChangeEvent.java @@ -1,10 +1,10 @@ -package edu.ucdenver.ccp.knowtator.events; - -import edu.ucdenver.ccp.knowtator.model.Annotation; - -public class AnnotationChangeEvent extends ChangeEvent { - - public AnnotationChangeEvent(Annotation oldAnnotation, Annotation newAnnotation) { - super(oldAnnotation, newAnnotation); - } -} +package edu.ucdenver.ccp.knowtator.events; + +import edu.ucdenver.ccp.knowtator.model.Annotation; + +public class AnnotationChangeEvent extends ChangeEvent { + + public AnnotationChangeEvent(Annotation oldAnnotation, Annotation newAnnotation) { + super(oldAnnotation, newAnnotation); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/events/ChangeEvent.java b/src/main/java/edu/ucdenver/ccp/knowtator/events/ChangeEvent.java index 5f45ac87..3c92c82a 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/events/ChangeEvent.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/events/ChangeEvent.java @@ -1,21 +1,21 @@ -package edu.ucdenver.ccp.knowtator.events; - -public abstract class ChangeEvent { - - private final O oldObject; - private final O newObject; - - ChangeEvent(O oldObject, O newObject) { - - this.oldObject = oldObject; - this.newObject = newObject; - } - - public O getOld() { - return oldObject; - } - - public O getNew() { - return newObject; - } -} +package edu.ucdenver.ccp.knowtator.events; + +public abstract class ChangeEvent { + + private final O oldObject; + private final O newObject; + + ChangeEvent(O oldObject, O newObject) { + + this.oldObject = oldObject; + this.newObject = newObject; + } + + public O getOld() { + return oldObject; + } + + public O getNew() { + return newObject; + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/events/GraphSpaceChangeEvent.java b/src/main/java/edu/ucdenver/ccp/knowtator/events/GraphSpaceChangeEvent.java index ab942bc4..da41cb52 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/events/GraphSpaceChangeEvent.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/events/GraphSpaceChangeEvent.java @@ -1,10 +1,10 @@ -package edu.ucdenver.ccp.knowtator.events; - -import edu.ucdenver.ccp.knowtator.model.GraphSpace; - -public class GraphSpaceChangeEvent extends ChangeEvent { - - public GraphSpaceChangeEvent(GraphSpace oldGraphSpace, GraphSpace newGraphSpace) { - super(oldGraphSpace, newGraphSpace); - } -} +package edu.ucdenver.ccp.knowtator.events; + +import edu.ucdenver.ccp.knowtator.model.GraphSpace; + +public class GraphSpaceChangeEvent extends ChangeEvent { + + public GraphSpaceChangeEvent(GraphSpace oldGraphSpace, GraphSpace newGraphSpace) { + super(oldGraphSpace, newGraphSpace); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/events/ProfileChangeEvent.java b/src/main/java/edu/ucdenver/ccp/knowtator/events/ProfileChangeEvent.java index 661bd197..46a3f751 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/events/ProfileChangeEvent.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/events/ProfileChangeEvent.java @@ -1,10 +1,10 @@ -package edu.ucdenver.ccp.knowtator.events; - -import edu.ucdenver.ccp.knowtator.model.Profile; - -public class ProfileChangeEvent extends ChangeEvent { - - public ProfileChangeEvent(Profile oldProfile, Profile newProfile) { - super(oldProfile, newProfile); - } -} +package edu.ucdenver.ccp.knowtator.events; + +import edu.ucdenver.ccp.knowtator.model.Profile; + +public class ProfileChangeEvent extends ChangeEvent { + + public ProfileChangeEvent(Profile oldProfile, Profile newProfile) { + super(oldProfile, newProfile); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/events/SpanChangeEvent.java b/src/main/java/edu/ucdenver/ccp/knowtator/events/SpanChangeEvent.java index d7664cef..141094cb 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/events/SpanChangeEvent.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/events/SpanChangeEvent.java @@ -1,10 +1,10 @@ -package edu.ucdenver.ccp.knowtator.events; - -import edu.ucdenver.ccp.knowtator.model.Span; - -public class SpanChangeEvent extends ChangeEvent { - - public SpanChangeEvent(Span oldSpan, Span newSpan) { - super(oldSpan, newSpan); - } -} +package edu.ucdenver.ccp.knowtator.events; + +import edu.ucdenver.ccp.knowtator.model.Span; + +public class SpanChangeEvent extends ChangeEvent { + + public SpanChangeEvent(Span oldSpan, Span newSpan) { + super(oldSpan, newSpan); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/events/TextSourceChangeEvent.java b/src/main/java/edu/ucdenver/ccp/knowtator/events/TextSourceChangeEvent.java index 125695d3..c0377de2 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/events/TextSourceChangeEvent.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/events/TextSourceChangeEvent.java @@ -1,10 +1,10 @@ -package edu.ucdenver.ccp.knowtator.events; - -import edu.ucdenver.ccp.knowtator.model.TextSource; - -public class TextSourceChangeEvent extends ChangeEvent { - - public TextSourceChangeEvent(TextSource oldTextSource, TextSource newTextSource) { - super(oldTextSource, newTextSource); - } -} +package edu.ucdenver.ccp.knowtator.events; + +import edu.ucdenver.ccp.knowtator.model.TextSource; + +public class TextSourceChangeEvent extends ChangeEvent { + + public TextSourceChangeEvent(TextSource oldTextSource, TextSource newTextSource) { + super(oldTextSource, newTextSource); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/iaa/KnowtatorIAA.java b/src/main/java/edu/ucdenver/ccp/knowtator/iaa/KnowtatorIAA.java index f568c3b3..9c46b796 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/iaa/KnowtatorIAA.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/iaa/KnowtatorIAA.java @@ -1,404 +1,404 @@ -package edu.ucdenver.ccp.knowtator.iaa; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.iaa.html.IAA2HTML; -import edu.ucdenver.ccp.knowtator.iaa.html.SpanMatcherHTML; -import edu.ucdenver.ccp.knowtator.iaa.matcher.ClassAndSpanMatcher; -import edu.ucdenver.ccp.knowtator.iaa.matcher.ClassMatcher; -import edu.ucdenver.ccp.knowtator.iaa.matcher.Matcher; -import edu.ucdenver.ccp.knowtator.iaa.matcher.SpanMatcher; -import edu.ucdenver.ccp.knowtator.model.Annotation; -import edu.ucdenver.ccp.knowtator.model.Profile; -import edu.ucdenver.ccp.knowtator.model.TextSource; -import edu.ucdenver.ccp.knowtator.model.collection.AnnotationCollection; -import edu.ucdenver.ccp.knowtator.model.collection.TextSourceCollection; - -import java.io.File; -import java.io.IOException; -import java.io.PrintStream; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - -public class KnowtatorIAA { - private File outputDirectory; - - // KnowtatorFilter filter; - - private TextSourceCollection textSources; - - // Project project; - - private KnowtatorController controller; - - // KnowtatorProjectUtil kpu; - - // MentionUtil mentionUtil; - - // FilterUtil filterUtil; - - private Map annotationTexts; - - private Map annotationTextNames; - - private Map textSourceAnnotationsMap; - - private PrintStream html; - - private Set setNames; - - @SuppressWarnings("unused") - public KnowtatorIAA( - File outputDirectory, - // KnowtatorFilter filter, - // Project project, - KnowtatorController controller - // MentionUtil mentionUtil, - // FilterUtil filterUtil - ) throws IAAException { - - this.outputDirectory = outputDirectory; - // this.filter = filter; - this.textSources = controller.getTextSourceManager().getTextSourceCollection(); - - this.controller = controller; - annotationTexts = new HashMap<>(); - annotationTextNames = new HashMap<>(); - - initSetNames(); - initTextSourceAnnotations(); - initHTML(); - } - - private void initSetNames() { - setNames = - controller - .getProfileManager() - .getProfileCollection() - .stream() - .map(Profile::getId) - .collect(Collectors.toSet()); - } - - private void initHTML() throws IAAException { - try { - html = new PrintStream(new File(outputDirectory, "index.html")); - html.println("Inter-Profile Agreement"); - html.println("
    "); - } catch (IOException ioe) { - throw new IAAException(ioe); - } - } - - public void closeHTML() { - html.println("
"); - html.println(""); - html.flush(); - html.close(); - } - - private void initTextSourceAnnotations() { - textSourceAnnotationsMap = new HashMap<>(); - for (TextSource textSource : textSources) { - textSourceAnnotationsMap.put(textSource, textSource.getAnnotationManager().getAnnotations()); - } - } - - // @SuppressWarnings("SameParameterValue") - // private static int convertMatchSpans(String matchSpans) throws IAAException { - // switch (matchSpans) { - // case "SpansMatchExactly": - // return annotation.SPANS_EXACT_COMPARISON; - // case "SpansOverlap": - // return annotation.SPANS_OVERLAP_COMPARISON; - // case "IgnoreSpans": - // return annotation.IGNORE_SPANS_COMPARISON; - // default: - // throw new IAAException( - // "Span match criteria of slot matcher must be one of SpansMatchExactly, SpansOverlap, or - // IgnoreSpans"); - // } - // } - // - // public static FeatureMatcher createFeatureMatcher(String matcherName) throws IAAException { - // FeatureMatcher featureMatcher = new FeatureMatcher(matcherName); - // - // featureMatcher.setMatchClasses(true); - // - - // featureMatcher.setMatchSpans(convertMatchSpans("SpansMatchExactly")); - - // Collection slotMatchCriteria = (Collection) slotMatcherConfig - // .getOwnSlotValues(kpu.getSlotMatchCriteriaSlot()); - // - // for (SimpleInstance slotMatchCriterium : slotMatchCriteria) { - // if (slotMatchCriterium.getDirectType().equalStartAndEnd(kpu.getSimpleSlotMatchCriteriaCls())) - // { - // Slot slotMatcherSlot = (Slot) - // slotMatchCriterium.getOwnSlotValue(kpu.getSlotMatcherSlotSlot()); - // featureMatcher.addComparedSimpleFeatures(slotMatcherSlot.getBrowserText()); - // } else if - // (slotMatchCriterium.getDirectType().equalStartAndEnd(kpu.getComplexSlotMatchCriteriaCls())) { - // Slot slotMatcherSlot = (Slot) - // slotMatchCriterium.getOwnSlotValue(kpu.getSlotMatcherSlotSlot()); - // Boolean b = (Boolean) slotMatchCriterium.getOwnSlotValue(kpu.getClassMatchCriteriaSlot()); - // boolean matchSlotClasses = b != null ? b.booleanValue() : false; - // - // String str = (String) slotMatchCriterium.getOwnSlotValue(kpu.getSpanMatchCriteriaSlot()); - // if (str == null) - // throw new IAAException("Slot matcher must specify how to compare spans of complex slot " - // + slotMatcherSlot.getBrowserText()); - // int matchSlotSpans = convertMatchSpans(str); - // - // Collection comparedSimpleSlots = (Collection) - // slotMatchCriterium.getOwnSlotValues(kpu - // .getSlotMatcherSimpleSlotsSlot()); - // Set comparedSimpleFeatures = new HashSet<>(); - // for (Slot comparedSimpleSlot : comparedSimpleSlots) { - // comparedSimpleFeatures.add(comparedSimpleSlot.getBrowserText()); - // } - // - // Boolean propogateTrivialMatch = (Boolean) slotMatchCriterium.getOwnSlotValue(kpu - // .getPropogateTrivialMatchSlot()); - // boolean trivialSimpleFeatureMatchesCauseTrivialMatch = propogateTrivialMatch != null ? - // propogateTrivialMatch - // .booleanValue() - // : false; - // - // ComplexFeatureMatchCriteria matchCriteria = new - // ComplexFeatureMatchCriteria(matchSlotClasses, - // matchSlotSpans, comparedSimpleFeatures, trivialSimpleFeatureMatchesCauseTrivialMatch); - // featureMatcher.addComparedComplexFeature(slotMatcherSlot.getBrowserText(), matchCriteria); - // } - // } - // - // return featureMatcher; - // } - - // public void runFeatureMatcherIAA() throws IAAException { - // runFeatureMatcherIAA("Feature Matcher"); - // } - - // public void runFeatureMatcherIAA(String matcherName) throws IAAException { - // try { - // FeatureMatcher featureMatcher = createFeatureMatcher(matcherName); - // IAA featureIAA = new IAA(setNames); - // for (Set annotations : textSourceAnnotationsMap.values()) { - // featureIAA.setAnnotations(annotations); - // featureIAA.allwayIAA(featureMatcher); - // featureIAA.pairwiseIAA(featureMatcher); - // } - // - // IAA2HTML.printIAA(featureIAA, featureMatcher, outputDirectory, textSources.size(), - // annotationTexts, - // annotationTextNames); - // html.println("
  • " + featureMatcher.getId() - // + "
  • "); - // } catch (Exception exception) { - // throw new IAAException(exception); - // } - // } - - public void runClassIAA() throws IAAException { - try { - ClassMatcher classMatcher = new ClassMatcher(); - IAA classIAA = new IAA(setNames); - - runIAAwithMatcher(classMatcher, classIAA); - - IAA2HTML.printIAA( - classIAA, - classMatcher, - outputDirectory, - textSources.size(), - annotationTexts, - annotationTextNames); - html.println( - "
  • " - + classMatcher.getName() - + "
  • "); - } catch (Exception e) { - throw new IAAException(e); - } - } - - private void runIAAwithMatcher(Matcher matcher, IAA iaa) throws IAAException { - for (AnnotationCollection annotationCollection : textSourceAnnotationsMap.values()) { - Set annotations = annotationCollection.getCollection(); - iaa.setAnnotations(annotations); - iaa.allwayIAA(matcher); - iaa.pairwiseIAA(matcher); - } - } - - public void runSpanIAA() throws IAAException { - try { - SpanMatcher spanMatcher = new SpanMatcher(); - IAA spanIAA = new IAA(setNames); - - runIAAwithMatcher(spanMatcher, spanIAA); - SpanMatcherHTML.printIAA( - spanIAA, - spanMatcher, - outputDirectory, - textSources.size(), - annotationTexts, - annotationTextNames); - html.println( - "
  • " - + spanMatcher.getName() - + "
  • "); - } catch (Exception e) { - throw new IAAException(e); - } - } - - public void runClassAndSpanIAA() throws IAAException { - try { - ClassAndSpanMatcher classAndSpanMatcher = new ClassAndSpanMatcher(); - IAA classAndSpanIAA = new IAA(setNames); - - runIAAwithMatcher(classAndSpanMatcher, classAndSpanIAA); - IAA2HTML.printIAA( - classAndSpanIAA, - classAndSpanMatcher, - outputDirectory, - textSources.size(), - annotationTexts, - annotationTextNames); - html.println( - "
  • " - + classAndSpanMatcher.getName() - + "
  • "); - } catch (Exception e) { - throw new IAAException(e); - } - } - - // public void runSubclassIAA() throws IAAException { - // try { - // Set topLevelClses = getTopLevelClses(); - // Set parentClses = new HashSet(); - // for (Cls topLevelCls : topLevelClses) { - // parentClses.add(topLevelCls); - // Collection subclasses = topLevelCls.getSubclasses(); - // if (subclasses != null) { - // Iterator subclassesItr = subclasses.iterator(); - // while (subclassesItr.hasNext()) { - // Cls subclass = (Cls) subclassesItr.next(); - // Collection subsubclasses = subclass.getSubclasses(); - // if (subsubclasses != null && subsubclasses.size() > 0) { - // parentClses.add(subclass); - // } - // } - // } - // } - // - // html.println("
  • subclass matcher
  • "); - // - // PrintStream subclassHTML = new PrintStream(new File(outputDirectory, - // "subclassMatcher.html")); - // subclassHTML.println(IAA2HTML.initHTML("Subclass Matcher", "")); - // subclassHTML.println("Subclass matcher"); - // subclassHTML.println("\n"); - // subclassHTML - // - // .println(""); - // - // SubclassMatcher subclassMatcher = new SubclassMatcher(createClassHierarchy(topLevelClses)); - // IAA subclassIAA = new IAA(setNames); - // - // NumberFormat percentageFormat = NumberFormat.getPercentInstance(); - // percentageFormat.setMinimumFractionDigits(2); - // - // for (Cls parentCls : parentClses) { - // calculateSubclassIAA(parentCls, subclassMatcher, subclassIAA, textSourceAnnotationsMap); - // SubclassMatcherHTML.printIAA(subclassIAA, subclassMatcher, outputDirectory, - // textSources.size(), - // annotationTexts, annotationTextNames); - // - // Map> allwayMatches = subclassIAA.getNontrivialAllwayMatches(); - // Set matches = IAA2HTML.getSingleSet(allwayMatches); - // - // Map> allwayNonmatches = subclassIAA.getNontrivialAllwayNonmatches(); - // Set nonmatches = IAA2HTML.getSingleSet(allwayNonmatches); - // - // double subclsIAA = (double) matches.size() / ((double) matches.size() + (double) - // nonmatches.size()); - // - // subclassHTML.println("" + ""); - // } - // subclassHTML.println("
    ClassIAAmatchesnon-matches
    " - // + parentCls.getId() + "" + percentageFormat.format(subclsIAA) + - // "" - // + matches.size() + "" + nonmatches.size() + "
    "); - // subclassHTML.println(""); - // subclassHTML.flush(); - // subclassHTML.close(); - // } catch (Exception e) { - // throw new IAAException(e); - // } - // } - - // private static void calculateSubclassIAA(Cls cls, SubclassMatcher subclassMatcher, - // IAA subclassIAA, Map> textSourceAnnotationsMap) - // throwsedu.ucdenver.ccp.knowtator.iaa.IAAException { - // subclassIAA.reset(); - // subclassMatcher.setIAAClass(cls.getId()); - // for (Set annotations : textSourceAnnotationsMap.values()) { - // subclassIAA.setAnnotations(annotations); - // subclassIAA.allwayIAA(subclassMatcher); - // subclassIAA.pairwiseIAA(subclassMatcher); - // } - // } - - // public static Set getSimpleSlotsFromMatcherConfig(SimpleInstance slotMatcherConfig, - // KnowtatorProjectUtil kpu) { - // Set returnValues = new HashSet(); - // - // Collection slotMatchCriteria = (Collection) slotMatcherConfig - // .getOwnSlotValues(kpu.getSlotMatchCriteriaSlot()); - // - // for (SimpleInstance slotMatchCriterium : slotMatchCriteria) { - // if (slotMatchCriterium.getDirectType().equalStartAndEnd(kpu.getSimpleSlotMatchCriteriaCls())) - // { - // Slot slotMatcherSlot = (Slot) - // slotMatchCriterium.getOwnSlotValue(kpu.getSlotMatcherSlotSlot()); - // returnValues.add(slotMatcherSlot); - // } else if - // (slotMatchCriterium.getDirectType().equalStartAndEnd(kpu.getComplexSlotMatchCriteriaCls())) { - // Collection comparedSimpleSlots = (Collection) - // slotMatchCriterium.getOwnSlotValues(kpu - // .getSlotMatcherSimpleSlotsSlot()); - // if (comparedSimpleSlots != null) - // returnValues.addAll(comparedSimpleSlots); - // } - // } - // return returnValues; - // } - - // public static Set getComplexSlotsFromMatcherConfig(SimpleInstance slotMatcherConfig, - // KnowtatorProjectUtil kpu) { - // Set returnValues = new HashSet(); - // - // Collection slotMatchCriteria = (Collection) slotMatcherConfig - // .getOwnSlotValues(kpu.getSlotMatchCriteriaSlot()); - // - // for (SimpleInstance slotMatchCriterium : slotMatchCriteria) { - // if - // (slotMatchCriterium.getDirectType().equalStartAndEnd(kpu.getComplexSlotMatchCriteriaCls())) { - // Slot slotMatcherSlot = (Slot) - // slotMatchCriterium.getOwnSlotValue(kpu.getSlotMatcherSlotSlot()); - // returnValues.add(slotMatcherSlot); - // } - // } - // return returnValues; - // } -} +package edu.ucdenver.ccp.knowtator.iaa; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.iaa.html.IAA2HTML; +import edu.ucdenver.ccp.knowtator.iaa.html.SpanMatcherHTML; +import edu.ucdenver.ccp.knowtator.iaa.matcher.ClassAndSpanMatcher; +import edu.ucdenver.ccp.knowtator.iaa.matcher.ClassMatcher; +import edu.ucdenver.ccp.knowtator.iaa.matcher.Matcher; +import edu.ucdenver.ccp.knowtator.iaa.matcher.SpanMatcher; +import edu.ucdenver.ccp.knowtator.model.Annotation; +import edu.ucdenver.ccp.knowtator.model.Profile; +import edu.ucdenver.ccp.knowtator.model.TextSource; +import edu.ucdenver.ccp.knowtator.model.collection.AnnotationCollection; +import edu.ucdenver.ccp.knowtator.model.collection.TextSourceCollection; + +import java.io.File; +import java.io.IOException; +import java.io.PrintStream; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +public class KnowtatorIAA { + private File outputDirectory; + + // KnowtatorFilter filter; + + private TextSourceCollection textSources; + + // Project project; + + private KnowtatorController controller; + + // KnowtatorProjectUtil kpu; + + // MentionUtil mentionUtil; + + // FilterUtil filterUtil; + + private Map annotationTexts; + + private Map annotationTextNames; + + private Map textSourceAnnotationsMap; + + private PrintStream html; + + private Set setNames; + + @SuppressWarnings("unused") + public KnowtatorIAA( + File outputDirectory, + // KnowtatorFilter filter, + // Project project, + KnowtatorController controller + // MentionUtil mentionUtil, + // FilterUtil filterUtil + ) throws IAAException { + + this.outputDirectory = outputDirectory; + // this.filter = filter; + this.textSources = controller.getTextSourceManager().getTextSourceCollection(); + + this.controller = controller; + annotationTexts = new HashMap<>(); + annotationTextNames = new HashMap<>(); + + initSetNames(); + initTextSourceAnnotations(); + initHTML(); + } + + private void initSetNames() { + setNames = + controller + .getProfileManager() + .getProfileCollection() + .stream() + .map(Profile::getId) + .collect(Collectors.toSet()); + } + + private void initHTML() throws IAAException { + try { + html = new PrintStream(new File(outputDirectory, "index.html")); + html.println("Inter-Profile Agreement"); + html.println("
      "); + } catch (IOException ioe) { + throw new IAAException(ioe); + } + } + + public void closeHTML() { + html.println("
    "); + html.println(""); + html.flush(); + html.close(); + } + + private void initTextSourceAnnotations() { + textSourceAnnotationsMap = new HashMap<>(); + for (TextSource textSource : textSources) { + textSourceAnnotationsMap.put(textSource, textSource.getAnnotationManager().getAnnotations()); + } + } + + // @SuppressWarnings("SameParameterValue") + // private static int convertMatchSpans(String matchSpans) throws IAAException { + // switch (matchSpans) { + // case "SpansMatchExactly": + // return annotation.SPANS_EXACT_COMPARISON; + // case "SpansOverlap": + // return annotation.SPANS_OVERLAP_COMPARISON; + // case "IgnoreSpans": + // return annotation.IGNORE_SPANS_COMPARISON; + // default: + // throw new IAAException( + // "Span match criteria of slot matcher must be one of SpansMatchExactly, SpansOverlap, or + // IgnoreSpans"); + // } + // } + // + // public static FeatureMatcher createFeatureMatcher(String matcherName) throws IAAException { + // FeatureMatcher featureMatcher = new FeatureMatcher(matcherName); + // + // featureMatcher.setMatchClasses(true); + // + + // featureMatcher.setMatchSpans(convertMatchSpans("SpansMatchExactly")); + + // Collection slotMatchCriteria = (Collection) slotMatcherConfig + // .getOwnSlotValues(kpu.getSlotMatchCriteriaSlot()); + // + // for (SimpleInstance slotMatchCriterium : slotMatchCriteria) { + // if (slotMatchCriterium.getDirectType().equalStartAndEnd(kpu.getSimpleSlotMatchCriteriaCls())) + // { + // Slot slotMatcherSlot = (Slot) + // slotMatchCriterium.getOwnSlotValue(kpu.getSlotMatcherSlotSlot()); + // featureMatcher.addComparedSimpleFeatures(slotMatcherSlot.getBrowserText()); + // } else if + // (slotMatchCriterium.getDirectType().equalStartAndEnd(kpu.getComplexSlotMatchCriteriaCls())) { + // Slot slotMatcherSlot = (Slot) + // slotMatchCriterium.getOwnSlotValue(kpu.getSlotMatcherSlotSlot()); + // Boolean b = (Boolean) slotMatchCriterium.getOwnSlotValue(kpu.getClassMatchCriteriaSlot()); + // boolean matchSlotClasses = b != null ? b.booleanValue() : false; + // + // String str = (String) slotMatchCriterium.getOwnSlotValue(kpu.getSpanMatchCriteriaSlot()); + // if (str == null) + // throw new IAAException("Slot matcher must specify how to compare spans of complex slot " + // + slotMatcherSlot.getBrowserText()); + // int matchSlotSpans = convertMatchSpans(str); + // + // Collection comparedSimpleSlots = (Collection) + // slotMatchCriterium.getOwnSlotValues(kpu + // .getSlotMatcherSimpleSlotsSlot()); + // Set comparedSimpleFeatures = new HashSet<>(); + // for (Slot comparedSimpleSlot : comparedSimpleSlots) { + // comparedSimpleFeatures.add(comparedSimpleSlot.getBrowserText()); + // } + // + // Boolean propogateTrivialMatch = (Boolean) slotMatchCriterium.getOwnSlotValue(kpu + // .getPropogateTrivialMatchSlot()); + // boolean trivialSimpleFeatureMatchesCauseTrivialMatch = propogateTrivialMatch != null ? + // propogateTrivialMatch + // .booleanValue() + // : false; + // + // ComplexFeatureMatchCriteria matchCriteria = new + // ComplexFeatureMatchCriteria(matchSlotClasses, + // matchSlotSpans, comparedSimpleFeatures, trivialSimpleFeatureMatchesCauseTrivialMatch); + // featureMatcher.addComparedComplexFeature(slotMatcherSlot.getBrowserText(), matchCriteria); + // } + // } + // + // return featureMatcher; + // } + + // public void runFeatureMatcherIAA() throws IAAException { + // runFeatureMatcherIAA("Feature Matcher"); + // } + + // public void runFeatureMatcherIAA(String matcherName) throws IAAException { + // try { + // FeatureMatcher featureMatcher = createFeatureMatcher(matcherName); + // IAA featureIAA = new IAA(setNames); + // for (Set annotations : textSourceAnnotationsMap.values()) { + // featureIAA.setAnnotations(annotations); + // featureIAA.allwayIAA(featureMatcher); + // featureIAA.pairwiseIAA(featureMatcher); + // } + // + // IAA2HTML.printIAA(featureIAA, featureMatcher, outputDirectory, textSources.size(), + // annotationTexts, + // annotationTextNames); + // html.println("
  • " + featureMatcher.getId() + // + "
  • "); + // } catch (Exception exception) { + // throw new IAAException(exception); + // } + // } + + public void runClassIAA() throws IAAException { + try { + ClassMatcher classMatcher = new ClassMatcher(); + IAA classIAA = new IAA(setNames); + + runIAAwithMatcher(classMatcher, classIAA); + + IAA2HTML.printIAA( + classIAA, + classMatcher, + outputDirectory, + textSources.size(), + annotationTexts, + annotationTextNames); + html.println( + "
  • " + + classMatcher.getName() + + "
  • "); + } catch (Exception e) { + throw new IAAException(e); + } + } + + private void runIAAwithMatcher(Matcher matcher, IAA iaa) throws IAAException { + for (AnnotationCollection annotationCollection : textSourceAnnotationsMap.values()) { + Set annotations = annotationCollection.getCollection(); + iaa.setAnnotations(annotations); + iaa.allwayIAA(matcher); + iaa.pairwiseIAA(matcher); + } + } + + public void runSpanIAA() throws IAAException { + try { + SpanMatcher spanMatcher = new SpanMatcher(); + IAA spanIAA = new IAA(setNames); + + runIAAwithMatcher(spanMatcher, spanIAA); + SpanMatcherHTML.printIAA( + spanIAA, + spanMatcher, + outputDirectory, + textSources.size(), + annotationTexts, + annotationTextNames); + html.println( + "
  • " + + spanMatcher.getName() + + "
  • "); + } catch (Exception e) { + throw new IAAException(e); + } + } + + public void runClassAndSpanIAA() throws IAAException { + try { + ClassAndSpanMatcher classAndSpanMatcher = new ClassAndSpanMatcher(); + IAA classAndSpanIAA = new IAA(setNames); + + runIAAwithMatcher(classAndSpanMatcher, classAndSpanIAA); + IAA2HTML.printIAA( + classAndSpanIAA, + classAndSpanMatcher, + outputDirectory, + textSources.size(), + annotationTexts, + annotationTextNames); + html.println( + "
  • " + + classAndSpanMatcher.getName() + + "
  • "); + } catch (Exception e) { + throw new IAAException(e); + } + } + + // public void runSubclassIAA() throws IAAException { + // try { + // Set topLevelClses = getTopLevelClses(); + // Set parentClses = new HashSet(); + // for (Cls topLevelCls : topLevelClses) { + // parentClses.add(topLevelCls); + // Collection subclasses = topLevelCls.getSubclasses(); + // if (subclasses != null) { + // Iterator subclassesItr = subclasses.iterator(); + // while (subclassesItr.hasNext()) { + // Cls subclass = (Cls) subclassesItr.next(); + // Collection subsubclasses = subclass.getSubclasses(); + // if (subsubclasses != null && subsubclasses.size() > 0) { + // parentClses.add(subclass); + // } + // } + // } + // } + // + // html.println("
  • subclass matcher
  • "); + // + // PrintStream subclassHTML = new PrintStream(new File(outputDirectory, + // "subclassMatcher.html")); + // subclassHTML.println(IAA2HTML.initHTML("Subclass Matcher", "")); + // subclassHTML.println("Subclass matcher"); + // subclassHTML.println("\n"); + // subclassHTML + // + // .println(""); + // + // SubclassMatcher subclassMatcher = new SubclassMatcher(createClassHierarchy(topLevelClses)); + // IAA subclassIAA = new IAA(setNames); + // + // NumberFormat percentageFormat = NumberFormat.getPercentInstance(); + // percentageFormat.setMinimumFractionDigits(2); + // + // for (Cls parentCls : parentClses) { + // calculateSubclassIAA(parentCls, subclassMatcher, subclassIAA, textSourceAnnotationsMap); + // SubclassMatcherHTML.printIAA(subclassIAA, subclassMatcher, outputDirectory, + // textSources.size(), + // annotationTexts, annotationTextNames); + // + // Map> allwayMatches = subclassIAA.getNontrivialAllwayMatches(); + // Set matches = IAA2HTML.getSingleSet(allwayMatches); + // + // Map> allwayNonmatches = subclassIAA.getNontrivialAllwayNonmatches(); + // Set nonmatches = IAA2HTML.getSingleSet(allwayNonmatches); + // + // double subclsIAA = (double) matches.size() / ((double) matches.size() + (double) + // nonmatches.size()); + // + // subclassHTML.println("" + ""); + // } + // subclassHTML.println("
    ClassIAAmatchesnon-matches
    " + // + parentCls.getId() + "" + percentageFormat.format(subclsIAA) + + // "" + // + matches.size() + "" + nonmatches.size() + "
    "); + // subclassHTML.println(""); + // subclassHTML.flush(); + // subclassHTML.close(); + // } catch (Exception e) { + // throw new IAAException(e); + // } + // } + + // private static void calculateSubclassIAA(Cls cls, SubclassMatcher subclassMatcher, + // IAA subclassIAA, Map> textSourceAnnotationsMap) + // throwsedu.ucdenver.ccp.knowtator.iaa.IAAException { + // subclassIAA.reset(); + // subclassMatcher.setIAAClass(cls.getId()); + // for (Set annotations : textSourceAnnotationsMap.values()) { + // subclassIAA.setAnnotations(annotations); + // subclassIAA.allwayIAA(subclassMatcher); + // subclassIAA.pairwiseIAA(subclassMatcher); + // } + // } + + // public static Set getSimpleSlotsFromMatcherConfig(SimpleInstance slotMatcherConfig, + // KnowtatorProjectUtil kpu) { + // Set returnValues = new HashSet(); + // + // Collection slotMatchCriteria = (Collection) slotMatcherConfig + // .getOwnSlotValues(kpu.getSlotMatchCriteriaSlot()); + // + // for (SimpleInstance slotMatchCriterium : slotMatchCriteria) { + // if (slotMatchCriterium.getDirectType().equalStartAndEnd(kpu.getSimpleSlotMatchCriteriaCls())) + // { + // Slot slotMatcherSlot = (Slot) + // slotMatchCriterium.getOwnSlotValue(kpu.getSlotMatcherSlotSlot()); + // returnValues.add(slotMatcherSlot); + // } else if + // (slotMatchCriterium.getDirectType().equalStartAndEnd(kpu.getComplexSlotMatchCriteriaCls())) { + // Collection comparedSimpleSlots = (Collection) + // slotMatchCriterium.getOwnSlotValues(kpu + // .getSlotMatcherSimpleSlotsSlot()); + // if (comparedSimpleSlots != null) + // returnValues.addAll(comparedSimpleSlots); + // } + // } + // return returnValues; + // } + + // public static Set getComplexSlotsFromMatcherConfig(SimpleInstance slotMatcherConfig, + // KnowtatorProjectUtil kpu) { + // Set returnValues = new HashSet(); + // + // Collection slotMatchCriteria = (Collection) slotMatcherConfig + // .getOwnSlotValues(kpu.getSlotMatchCriteriaSlot()); + // + // for (SimpleInstance slotMatchCriterium : slotMatchCriteria) { + // if + // (slotMatchCriterium.getDirectType().equalStartAndEnd(kpu.getComplexSlotMatchCriteriaCls())) { + // Slot slotMatcherSlot = (Slot) + // slotMatchCriterium.getOwnSlotValue(kpu.getSlotMatcherSlotSlot()); + // returnValues.add(slotMatcherSlot); + // } + // } + // return returnValues; + // } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/iaa/html/IAA2HTML.java b/src/main/java/edu/ucdenver/ccp/knowtator/iaa/html/IAA2HTML.java index a8781d26..9cd88f12 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/iaa/html/IAA2HTML.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/iaa/html/IAA2HTML.java @@ -1,1021 +1,1021 @@ -package edu.ucdenver.ccp.knowtator.iaa.html; - -import edu.ucdenver.ccp.knowtator.iaa.AnnotationSpanIndex; -import edu.ucdenver.ccp.knowtator.iaa.IAA; -import edu.ucdenver.ccp.knowtator.iaa.matcher.Matcher; -import edu.ucdenver.ccp.knowtator.model.Annotation; -import edu.ucdenver.ccp.knowtator.model.Span; - -import java.io.File; -import java.io.IOException; -import java.io.PrintStream; -import java.text.NumberFormat; -import java.util.*; - -public class IAA2HTML { - - public static void printIAA( - IAA iaa, - Matcher matcher, - File directory, - int numberOfDocs, - Map annotationTexts, - Map annotationTextNames) - throws Exception { - NumberFormat percentageFormat = NumberFormat.getPercentInstance(); - percentageFormat.setMinimumFractionDigits(2); - - String fileName = matcher.getName(); - - PrintStream tabular = new PrintStream(new File(directory, fileName + ".dat")); - PrintStream html = new PrintStream(new File(directory, fileName + ".html")); - - initHTML(html, matcher.getName(), null, null, matcher.getDescription()); - - printIntro(html, iaa, numberOfDocs, fileName, matcher); - html.println("

    "); - printTitleRowForAllwayIAA(html, matcher); - - tabular.println( - "This test_project is provided to facilitate cut-n-paste into a spreadsheet.\n" - + "If you cannot directly copy the data below into a spreadsheet without it all going into a single cell,\n" - + "then try copying to a text editor first and then copy it from there. There is typically a 'paste special'\n" - + "option under the Edit menu that will allow you to paste the copied data as text. This will also work.\n\n\n"); - - if (matcher.returnsTrivials()) - tabular.println( - "type\tmatches\ttrivial matches\tnon-trivial matches\tnon-matches\ttrivial non-matches\tnon-trivial non-matches"); - else tabular.println("type\tmatches\tnon-matches"); - - Set classes = iaa.getAnnotationClasses(); - Set sets = iaa.getSetNames(); - - Map> allwayMatches = iaa.getAllwayMatches(); - Map> nontrivialAllwayMatches = iaa.getNontrivialAllwayMatches(); - Map> trivialAllwayMatches = iaa.getTrivialAllwayMatches(); - Map> allwayNonmatches = iaa.getAllwayNonmatches(); - Map> nontrivialAllwayNonmatches = iaa.getNontrivialAllwayNonmatches(); - Map> trivialAllwayNonmatches = iaa.getTrivialAllwayNonmatches(); - - Set allwayMatchesSingleSet = getSingleSet(allwayMatches); - Set trivialAllwayMatchesSingleSet = getSingleSet(trivialAllwayMatches); - Set nontrivialAllwayMatchesSingleSet = getSingleSet(nontrivialAllwayMatches); - Set allwayNonmatchesSingleSet = getSingleSet(allwayNonmatches); - Set trivialAllwayNonmatchesSingleSet = getSingleSet(trivialAllwayNonmatches); - Set nontrivialAllwayNonmatchesSingleSet = getSingleSet(nontrivialAllwayNonmatches); - - AnnotationSpanIndex spanIndex = new AnnotationSpanIndex(allwayNonmatchesSingleSet); - - int totalAllwayMatches = allwayMatchesSingleSet.size(); - int totalTrivialAllwayMatches = trivialAllwayMatchesSingleSet.size(); - int totalNontrivialAllwayMatches = nontrivialAllwayMatchesSingleSet.size(); - int totalAllwayNonmatches = allwayNonmatchesSingleSet.size(); - int totalTrivialAllwayNonmatches = trivialAllwayNonmatchesSingleSet.size(); - int totalNontrivialAllwayNonmatches = nontrivialAllwayNonmatchesSingleSet.size(); - - double iaaScore = - (double) totalAllwayMatches - / ((double) totalAllwayMatches + (double) totalAllwayNonmatches); - double stingyIAAScore = - (double) totalNontrivialAllwayMatches - / ((double) totalAllwayMatches + (double) totalAllwayNonmatches); - double respectableIAAScore = - (double) totalNontrivialAllwayMatches - / ((double) totalNontrivialAllwayMatches + (double) totalAllwayNonmatches); - double nontrivialIAAScore = - (double) totalNontrivialAllwayMatches - / ((double) totalNontrivialAllwayMatches + (double) totalNontrivialAllwayNonmatches); - - if (matcher.returnsTrivials()) { - html.println( - "All classes" - + "" - + percentageFormat.format(iaaScore) - + "" - + "" - + percentageFormat.format(stingyIAAScore) - + "" - + "" - + percentageFormat.format(respectableIAAScore) - + "" - + "" - + percentageFormat.format(nontrivialIAAScore) - + "" - + "" - + totalAllwayMatches - + "" - + "" - + totalTrivialAllwayMatches - + "" - + "" - + totalNontrivialAllwayMatches - + "" - + "" - + totalAllwayNonmatches - + "" - + "" - + totalTrivialAllwayNonmatches - + "" - + "" - + totalNontrivialAllwayNonmatches - + ""); - tabular.println( - "All classes\t" - + totalAllwayMatches - + "\t" - + totalTrivialAllwayMatches - + "\t" - + totalNontrivialAllwayMatches - + "\t" - + totalAllwayNonmatches - + "\t" - + totalTrivialAllwayNonmatches - + "\t" - + totalNontrivialAllwayNonmatches); - } else { - html.println( - "All classes" - + "" - + percentageFormat.format(iaaScore) - + "" - + "" - + totalAllwayMatches - + "" - + "" - + totalAllwayNonmatches - + ""); - tabular.println("All classes\t" + totalAllwayMatches + "\t" + totalAllwayNonmatches); - } - - Map> sortedAllwayMatches = sortByType(classes, allwayMatchesSingleSet); - Map> sortedAllwayTrivialMatches = - sortByType(classes, trivialAllwayMatchesSingleSet); - Map> sortedAllwayNontrivialMatches = - sortByType(classes, nontrivialAllwayMatchesSingleSet); - Map> sortedAllwayNonmatches = - sortByType(classes, allwayNonmatchesSingleSet); - Map> sortedAllwayTrivialNonmatches = - sortByType(classes, trivialAllwayNonmatchesSingleSet); - Map> sortedAllwayNontrivialNonmatches = - sortByType(classes, nontrivialAllwayNonmatchesSingleSet); - - List sortedTypes = new ArrayList<>(classes); - Collections.sort(sortedTypes); - - for (String type : sortedTypes) { - int classMatches = sortedAllwayMatches.get(type).size(); - int classTrivialMatches = sortedAllwayTrivialMatches.get(type).size(); - int classNontrivialMatches = sortedAllwayNontrivialMatches.get(type).size(); - int classNonmatches = sortedAllwayNonmatches.get(type).size(); - int classTrivialNonmatches = sortedAllwayTrivialNonmatches.get(type).size(); - int classNontrivialNonmatches = sortedAllwayNontrivialNonmatches.get(type).size(); - - iaaScore = (double) classMatches / ((double) classMatches + (double) classNonmatches); - stingyIAAScore = - (double) classNontrivialMatches / ((double) classMatches + (double) classNonmatches); - respectableIAAScore = - (double) classNontrivialMatches - / ((double) classNontrivialMatches + (double) classNonmatches); - nontrivialIAAScore = - (double) classNontrivialMatches - / ((double) classNontrivialMatches + (double) classNontrivialNonmatches); - - if (matcher.returnsTrivials()) { - html.println( - "" - + type - + "" - + "" - + percentageFormat.format(iaaScore) - + "" - + "" - + percentageFormat.format(stingyIAAScore) - + "" - + "" - + percentageFormat.format(respectableIAAScore) - + "" - + "" - + percentageFormat.format(nontrivialIAAScore) - + "" - + "" - + classMatches - + "" - + "" - + classTrivialMatches - + "" - + "" - + classNontrivialMatches - + "" - + "" - + classNonmatches - + "" - + "" - + classTrivialNonmatches - + "" - + "" - + classNontrivialNonmatches - + ""); - tabular.println( - type - + "\t" - + classMatches - + "\t" - + classTrivialMatches - + "\t" - + classNontrivialMatches - + "\t" - + classNonmatches - + "\t" - + classTrivialNonmatches - + "\t" - + classNontrivialNonmatches); - } else { - html.println( - "" - + type - + "" - + "" - + percentageFormat.format(iaaScore) - + "" - + "" - + classMatches - + "" - + "" - + classNonmatches - + ""); - tabular.println(type + "\t" + classMatches + "\t" + classNonmatches); - } - } - html.println(""); - - printMatchData( - html, - sets, - fileName, - directory, - allwayMatches, - classes, - sortedTypes, - annotationTexts, - annotationTextNames, - matcher, - trivialAllwayMatches, - nontrivialAllwayMatches, - iaa); - - printNonmatchData( - html, - sets, - fileName, - directory, - allwayNonmatches, - classes, - spanIndex, - sortedTypes, - annotationTexts, - annotationTextNames, - matcher, - trivialAllwayNonmatches, - nontrivialAllwayNonmatches); - - Map>> pairwiseMatches = iaa.getPairwiseMatches(); - Map>> pairwiseNonmatches = iaa.getPairwiseNonmatches(); - - printPairwiseAgreement(html, sets, pairwiseMatches, pairwiseNonmatches, percentageFormat); - - html.flush(); - html.close(); - tabular.flush(); - tabular.close(); - } - - private static void printMatchData( - PrintStream html, - Set sets, - String fileName, - File directory, - Map> allwayMatches, - Set classes, - List sortedTypes, - Map annotationTexts, - Map annotationTextNames, - Matcher matcher, - Map> trivialAllwayMatches, - Map> nontrivialAllwayMatches, - IAA iaa) - throws Exception { - html.println("

    match data

    "); - html.println("
      "); - - Map> matchSets = iaa.getAllwayMatchSets(); - - for (String set : sets) { - String matchesFileName = fileName + ".matches." + set + ".html"; - html.println("
    • matches for " + set + "
    • "); - PrintStream matchesStream = new PrintStream(new File(directory, matchesFileName)); - Set matches = allwayMatches.get(set); - Map> sortedMatches = sortByType(classes, matches); - - initHTML( - matchesStream, - "Matches for " + set, - fileName + ".html", - fileName, - "Each annotation that was considered a match is shown in the text that it was found in. The matching annotations from the other annotation sets are also shown."); - printInstances( - matchesStream, - sortedMatches, - sortedTypes, - annotationTexts, - annotationTextNames, - matchSets); - matchesStream.flush(); - matchesStream.close(); - - if (matcher.returnsTrivials()) { - String trivialMatchesFileName = fileName + ".trivial.matches." + set + ".html"; - html.println( - "
    • trivial matches for " - + set - + "
    • "); - PrintStream trivialMatchesStream = - new PrintStream(new File(directory, trivialMatchesFileName)); - Set trivialMatches = trivialAllwayMatches.get(set); - Map> sortedTrivialMatches = sortByType(classes, trivialMatches); - initHTML( - trivialMatchesStream, - "Trivial matches for " + set, - fileName + ".html", - fileName, - "Each annotation that was considered a trival match is shown in the text that it was found in. The matching annotations from the other annotation sets are also shown."); - printInstances( - trivialMatchesStream, - sortedTrivialMatches, - sortedTypes, - annotationTexts, - annotationTextNames, - matchSets); - trivialMatchesStream.flush(); - trivialMatchesStream.close(); - - String nontrivialMatchesFileName = fileName + ".nontrivial.matches." + set + ".html"; - html.println( - "
    • non-trivial matches for " - + set - + "
    • "); - PrintStream nontrivialMatchesStream = - new PrintStream(new File(directory, nontrivialMatchesFileName)); - Set nontrivialMatches = nontrivialAllwayMatches.get(set); - Map> sortedNontrivialMatches = - sortByType(classes, nontrivialMatches); - initHTML( - nontrivialMatchesStream, - "non-trivial non-matches for " + set, - fileName + ".html", - fileName, - "Each annotation that was considered a non-trival match is shown in the text that it was found in. The matching from the other annotation sets are also shown."); - printInstances( - nontrivialMatchesStream, - sortedNontrivialMatches, - sortedTypes, - annotationTexts, - annotationTextNames, - matchSets); - nontrivialMatchesStream.flush(); - nontrivialMatchesStream.close(); - } - } - html.println("

    "); - } - - private static void printNonmatchData( - PrintStream html, - Set sets, - String fileName, - File directory, - Map> allwayNonmatches, - Set classes, - AnnotationSpanIndex spanIndex, - List sortedTypes, - Map annotationTexts, - Map annotationTextNames, - Matcher matcher, - Map> trivialAllwayNonmatches, - Map> nontrivialAllwayNonmatches) - throws Exception { - html.println("

    non-match data

    "); - html.println("
      "); - - for (String set : sets) { - String errorsFileName = fileName + ".nonmatches." + set + ".html"; - html.println("
    • non-matches for " + set + "
    • "); - PrintStream errors = new PrintStream(new File(directory, errorsFileName)); - Set nonmatches = allwayNonmatches.get(set); - Map> sortedNonmatches = sortByType(classes, nonmatches); - - Map> comparisonAnnotations = new HashMap<>(); - for (Annotation nonmatch : nonmatches) { - comparisonAnnotations.put(nonmatch, getCandidateAnnotations(nonmatch, spanIndex)); - } - - initHTML( - errors, - "Non-matches for " + set, - fileName + ".html", - fileName, - "Each annotation that was considered a non-match is shown in the text that it was found in. Overlapping annotations from the other annotation sets are also shown."); - printInstances( - errors, - sortedNonmatches, - sortedTypes, - annotationTexts, - annotationTextNames, - comparisonAnnotations); - errors.flush(); - errors.close(); - - if (matcher.returnsTrivials()) { - String trivialNonMatchesFileName = fileName + ".trivial.nonmatches." + set + ".html"; - html.println( - "
    • trivial non-matches for " - + set - + "
    • "); - PrintStream trivialErrors = new PrintStream(new File(directory, trivialNonMatchesFileName)); - Set trivialNonmatches = trivialAllwayNonmatches.get(set); - Map> sortedTrivialNonmatches = - sortByType(classes, trivialNonmatches); - initHTML( - trivialErrors, - "Trivial non-matches for " + set, - fileName + ".html", - fileName, - "Each annotation that was considered a trival non-match is shown in the text that it was found in. Overlapping annotations from the other annotation sets are also shown."); - printInstances( - trivialErrors, - sortedTrivialNonmatches, - sortedTypes, - annotationTexts, - annotationTextNames, - comparisonAnnotations); - trivialErrors.flush(); - trivialErrors.close(); - - String nontrivialNonMatchesFileName = fileName + ".nontrivial.nonmatches." + set + ".html"; - html.println( - "
    • non-trivial non-matches for " - + set - + "
    • "); - PrintStream nontrivialErrors = - new PrintStream(new File(directory, nontrivialNonMatchesFileName)); - Set nontrivialNonmatches = nontrivialAllwayNonmatches.get(set); - Map> sortedNontrivialNonmatches = - sortByType(classes, nontrivialNonmatches); - initHTML( - nontrivialErrors, - "non-trivial non-matches for " + set, - fileName + ".html", - fileName, - "Each annotation that was considered a non-trival non-match is shown in the text that it was found in. Overlapping annotations from the other annotation sets are also shown."); - printInstances( - nontrivialErrors, - sortedNontrivialNonmatches, - sortedTypes, - annotationTexts, - annotationTextNames, - comparisonAnnotations); - nontrivialErrors.flush(); - nontrivialErrors.close(); - } - } - html.println("

    "); - } - - private static Set getCandidateAnnotations( - Annotation annotation, AnnotationSpanIndex spanIndex) { - Set candidateAnnotations = new HashSet<>(); - String set = annotation.getAnnotator().getId(); - String docID = annotation.getTextSource().getId(); - - Set overlappingAnnotations = spanIndex.getOverlappingAnnotations(annotation); - for (Annotation overlappingAnnotation : overlappingAnnotations) { - String candidateAnnotationSet = overlappingAnnotation.getAnnotator().getId(); - if (!candidateAnnotationSet.equals(set)) { - String candidateDocID = overlappingAnnotation.getTextSource().getId(); - if (candidateDocID.equals(docID)) { - candidateAnnotations.add(overlappingAnnotation); - } - } - } - return candidateAnnotations; - } - - private static void printInstances( - PrintStream out, - Map> sortedAnnotations, - List sortedTypes, - Map annotationTexts, - Map annotationTextNames, - Map> comparisonAnnotations) { - for (String type : sortedTypes) { - out.println("

    " + type + "

    "); - Set typeAnnotations = sortedAnnotations.get(type); - for (Annotation annotation : typeAnnotations) { - writeAnnotationTextSourceHTML( - out, annotation, annotationTexts.get(annotation), annotationTextNames.get(annotation)); - out.println("
    • "); - printAnnotationHTML(out, annotation, annotationTexts.get(annotation)); - - Set comparisons = comparisonAnnotations.get(annotation); - if (comparisons != null) { - for (Annotation comparisonAnnotation : comparisons) { - if (!comparisonAnnotation.equals(annotation)) { - out.println("
    • "); - printAnnotationHTML( - out, comparisonAnnotation, annotationTexts.get(comparisonAnnotation)); - } - } - } - out.println("
    "); - } - } - } - - static Set getSingleSet(Map> annotations) { - Set returnValues = new HashSet<>(); - for (String setName : annotations.keySet()) { - returnValues.addAll(annotations.get(setName)); - } - return returnValues; - } - - private static void initHTML( - PrintStream html, String title, String link, String linkLabel, String description) { - html.println(""); - html.println("" + title + ""); - html.println(""); - if (link != null) html.println("" + linkLabel + ""); - html.println("

    " + title + "

    "); - html.println(description); - html.println("
    "); - } - - static Map> sortByType( - Set types, Collection annotations) { - Map> sortedAnnotations = new HashMap<>(); - - for (String type : types) { - sortedAnnotations.put(type, new HashSet<>()); - } - for (Annotation annotation : annotations) { - String type = annotation.getOwlClass().toString(); - sortedAnnotations.get(type).add(annotation); - } - return sortedAnnotations; - } - - private static void writeAnnotationTextSourceHTML( - PrintStream out, Annotation annotation, String annotationText, String annotationTextName) { - StringBuilder html = new StringBuilder("

    "); - if (annotationTextName != null) - html.append("Text source docID = ").append(annotationTextName).append("

    "); - - if (annotationText != null) { - TreeSet spans = annotation.getSpanCollection().getCollection(); - List modifiedSpans = new ArrayList<>(spans); - - annotationText = shortenText(annotationText, modifiedSpans); - - int mark = 0; - - for (Span span : modifiedSpans) { - try { - //noinspection RedundantStringOperation - html.append(annotationText.substring(mark, span.getStart())).append(""); - html.append(Span.substring(annotationText, span)).append(""); - mark = span.getEnd(); - } catch (StringIndexOutOfBoundsException sioobe) { - sioobe.printStackTrace(); - } - } - if (mark < annotationText.length()) html.append(annotationText.substring(mark)); - } - out.println(html.toString()); - } - - private static String shortenText(String text, java.util.List spans) { - int frontBuffer = 150; - int endBuffer = 150; - if (spans.size() > 0) { - Span span = spans.get(0); - int start = Math.max(0, span.getStart() - frontBuffer); - int end = Math.min(text.length(), span.getEnd() + endBuffer); - String substring = text.substring(start, end); - - for (int i = 0; i < spans.size(); i++) { - span = spans.get(i); - Span offsetSpan = new Span(span.getStart() - start, span.getEnd() - start); - spans.set(i, offsetSpan); - } - return substring; - } - return text; - } - - private static void printAnnotationHTML( - PrintStream out, Annotation annotation, String annotationText) { - StringBuilder html = new StringBuilder(); - - if (annotationText != null) { - String coveredText = IAA.getCoveredText(annotation, annotationText, " ... "); - html.append(coveredText); - } - html.append(" ").append(annotation.toHTML()); - out.print(html.toString()); - } - - private static void printIntro( - PrintStream html, IAA iaa, int numberOfDocs, String fileName, Matcher matcher) { - html.println( - "

    For more detailed documentation on IAA please see the " - + "IAA documentation."); - - html.println("

    "); - html.println("

    " + iaa.getSetNames().size() + "-way IAA Results

    "); - html.println("IAA calculated on " + numberOfDocs + " documents."); - html.println("

    tabular data"); - html.println("

    all annotations = matches + non-matches"); - html.println("
    IAA = matches / all annotations"); - if (matcher.returnsTrivials()) { - html.println("
    stingy IAA = non-trivial matches / (matches + non-matches)"); - html.println( - "
    respectable IAA = non-trivial matches / (non-trivial matches + non-matches)"); - html.println( - "
    non-trivial IAA = non-trivial matches / (non-trivial matches + non-trivial non-matches)"); - } - } - - private static void printTitleRowForAllwayIAA(PrintStream html, Matcher matcher) { - html.println("" + ""); - if (matcher.returnsTrivials()) { - html.println( - "" - + "" - + ""); - } - html.println(""); - if (matcher.returnsTrivials()) { - html.println("" + ""); - } - html.println(""); - if (matcher.returnsTrivials()) { - html.println( - "" + ""); - } - html.println(""); - } - - static String initHTML(String title, String description) { - return "\n" - + "" - + title - + "\n" - + "\n" - + "

    " - + title - + "

    \n" - + description - + " For more detailed documentation on IAA please see the IAA documentation.\n"; - } - - static void printMatchData( - PrintStream html, - Set sets, - String fileName, - File directory, - Map> allwayMatches, - Map annotationTexts, - Map annotationTextNames, - Set classes, - IAA iaa) - throws IOException { - - html.println("

    match data

    "); - html.println("
      "); - - Map> matchSets = iaa.getAllwayMatchSets(); - List sortedTypes = new ArrayList<>(classes); - Collections.sort(sortedTypes); - - for (String set : sets) { - String matchesFileName = fileName + ".matches." + set + ".html"; - html.println("
    • matches for " + set + "
    • "); - PrintStream matchesStream = new PrintStream(new File(directory, matchesFileName)); - Set matches = allwayMatches.get(set); - Map> sortedMatches = IAA2HTML.sortByType(classes, matches); - - matchesStream.println( - initHTML( - "Matches for " + set, - "Each annotation that was considered a match is shown in the text that it was found in. The matching annotations from the other annotation sets are also shown.")); - IAA2HTML.printInstances( - matchesStream, - sortedMatches, - sortedTypes, - annotationTexts, - annotationTextNames, - matchSets); - matchesStream.flush(); - matchesStream.close(); - } - html.println("

    "); - } - - static void printNonmatchData( - PrintStream html, - Set sets, - String fileName, - File directory, - Map> allwayNonmatches, - AnnotationSpanIndex spanIndex, - Map annotationTexts, - Map annotationTextNames, - Set classes) - throws IOException { - html.println("

    non-match data

    "); - html.println("
      "); - - List sortedTypes = new ArrayList<>(classes); - Collections.sort(sortedTypes); - - for (String set : sets) { - String errorsFileName = fileName + ".nonmatches." + set + ".html"; - html.println("
    • non-matches for " + set + "
    • "); - PrintStream errors = new PrintStream(new File(directory, errorsFileName)); - Set nonmatches = allwayNonmatches.get(set); - Map> sortedNonmatches = IAA2HTML.sortByType(classes, nonmatches); - - Map> comparisonAnnotations = new HashMap<>(); - for (Annotation nonmatch : nonmatches) { - comparisonAnnotations.put(nonmatch, IAA2HTML.getCandidateAnnotations(nonmatch, spanIndex)); - } - - errors.println( - initHTML( - "Non-matches for " + set, - "Each annotation that was considered a non-match is shown in the text that it was found in. Overlapping annotations from the other annotation sets are also shown.")); - IAA2HTML.printInstances( - errors, - sortedNonmatches, - sortedTypes, - annotationTexts, - annotationTextNames, - comparisonAnnotations); - errors.flush(); - errors.close(); - } - html.println("

    "); - } - - static void printPairwiseAgreement( - PrintStream html, - Set sets, - Map>> pairwiseMatches, - Map>> pairwiseNonmatches, - NumberFormat percentageFormat) { - html.println("

    Pair-wise agreement

    "); - html.println( - "
    TypeIAAstingy IAArespectable IAAnon-trivial IAAmatchestrivial matchesnon-trivial matchesnon-matchestrivial non-matchesnon-trivial non-matches
    " - + "" - + "" - + "" - + "" - + "" - + "" - + ""); - - for (String setName : sets) { - for (String setName2 : sets) { - - if (!setName.equals(setName2)) { - Set truePositives = pairwiseMatches.get(setName).get(setName2); - Set falseNegatives = pairwiseNonmatches.get(setName).get(setName2); - Set falsePositives = pairwiseNonmatches.get(setName2).get(setName); - double precision = - (double) truePositives.size() - / ((double) truePositives.size() + (double) falsePositives.size()); - double recall = - (double) truePositives.size() - / ((double) truePositives.size() + (double) falseNegatives.size()); - double f_score = ((double) 2 * precision * recall) / (recall + precision); - - html.println( - "" - + "" - + "" - + "" - + "" - + "" - + "" - + ""); - } - } - } - html.println("
    Gold standard setcompared settrue positivesfalse positivesfalse negativesprecisionrecallF-score
    " - + setName - + "" - + setName2 - + "" - + truePositives.size() - + "" - + falsePositives.size() - + "" - + falseNegatives.size() - + "" - + percentageFormat.format(precision) - + "" - + percentageFormat.format(recall) - + "" - + percentageFormat.format(f_score) - + "
    "); - html.println("Precision and recall are given equal weight for the F-score."); - } -} - -// for(String type : sortedTypes) -// { -// errors.println("

    "+type+"

    "); -// Set typeNonmatches = sortedNonmatches.get(type); -// for(annotation annotation : typeNonmatches) -// { -// String docID = annotation.getId(); -// writeAnnotationTextSourceHTML(errors, annotation, -// annotationTexts.get(annotation), annotationTextNames.get(annotation)); -// errors.println("
    • "); -// printAnnotationHTML(errors, annotation, annotationTexts.get(annotation)); -// -// Set candidateAnnotations = -// spanIndex.getOverlappingAnnotations(annotation); -// for(annotation candidateAnnotation : candidateAnnotations) -// { -// String candidateAnnotationSet = candidateAnnotation.getId(); -// if(!candidateAnnotationSet.equalStartAndEnd(set)) -// { -// String candidateDocID = candidateAnnotation.getId(); -// if(candidateDocID.equalStartAndEnd(docID)) -// { -// errors.println("
    • "); -// printAnnotationHTML(errors, candidateAnnotation, -// annotationTexts.get(candidateAnnotation)); -// } -// } -// } -// errors.println("
    "); -// } -// } - -// for(String set : sets) -// { -// String matchesFileName = fileName+".matches."+set+".html"; -// html.println("
  • matches for "+set+"
  • " -// ); -// PrintStream matchesStream = new PrintStream(new File(directory, -// matchesFileName)); -// Set matches = allwayMatches.get(set); -// Map> sortedMatches = sortByType(classes, matches); -// Map> matchSets = new HashMap>(); -// for(annotation nonmatch : nonmatches) -// { -// comparisonAnnotations.put(nonmatch, getCandidateAnnotations(nonmatch, -// spanIndex)); -// } -// -// initHTML(errors, "Non-matches for "+set, fileName+".html", fileName, -// "Each annotation that was considered a non-match is shown in the text that it was found in. -// Overlapping annotations from the other annotation sets are also shown." -// ); -// printInstances(errors, sortedNonmatches, sortedTypes, annotationTexts, -// annotationTextNames, comparisonAnnotations); -// errors.flush(); errors.close(); -// } - -// String matchesFileName = fileName+".matches.html"; -// String trivialMatchesFileName = fileName+".trivial.matches.html"; -// String nontrivialMatchesFileName = fileName+".nontrivial.matches.html"; -// PrintStream matchesStream = new PrintStream(new File(directory, -// matchesFileName)); -// PrintStream trivialMatchesStream = new PrintStream(new File(directory, -// trivialMatchesFileName)); -// PrintStream nontrivialMatchesStream = new PrintStream(new File(directory, -// nontrivialMatchesFileName)); -// -// html.println("

    match data

    "); -// html.println(""); -// -// Map> matchSets = iaa.getAllwayMatchSets(); -// initHTML(matchesStream, "Matches", fileName+".html", fileName, -// "Each annotation that was considered a match is shown in the text that it was found in. -// Annotations from each of annotation sets are shown because there may be differences in the -// individual annotations if the match criteria ignored those differences. Only one of the -// annotation's spans are bolded in the text." -// ); -// if(matcher.returnsTrivials()) -// { -// initHTML(trivialMatchesStream, "Trivial matches", fileName+".html", fileName, -// "Each annotation that was considered a match is shown in the text that it was found in. -// Annotations from each of annotation sets are shown because there may be differences in the -// individual annotations if the match criteria ignored those differences. Only one of the -// annotation's spans are bolded in the text." -// ); -// initHTML(nontrivialMatchesStream, "Non-trivial matches", fileName+".html", -// fileName, -// "Each annotation that was considered a match is shown in the text that it was found in. -// Annotations from each of annotation sets are shown because there may be differences in the -// individual annotations if the match criteria ignored those differences. Only one of the -// annotation's Span is bolded in the text." -// ); -// } -// -// Set printedAnnotations = new HashSet(); -// for(String type : sortedTypes) -// { -// matchesStream.println("

    "+type+"

    "); -// trivialMatchesStream.println("

    "+type+"

    "); -// nontrivialMatchesStream.println("

    "+type+"

    "); -// -// Set typeTrivialMatches = sortedAllwayTrivialMatches.get(type); -// Set typeNontrivialMatches = -// sortedAllwayNontrivialMatches.get(type); -// Set typeMatches = sortedAllwayMatches.get(type); -// -// for(annotation annotation : typeMatches) -// { -// if(printedAnnotations.contains(annotation)) continue; -// Set matchSet = matchSets.get(annotation); -// -// writeAnnotationTextSourceHTML(matchesStream, annotation, -// annotationTexts.get(annotation), annotationTextNames.get(annotation)); -// matchesStream.println("

    "); -// printAnnotationHTML(matchesStream, annotation, -// annotationTexts.get(annotation)); -// if(typeTrivialMatches.contains(annotation) && matcher.returnsTrivials()) -// { -// writeAnnotationTextSourceHTML(trivialMatchesStream, annotation, -// annotationTexts.get(annotation), annotationTextNames.get(annotation)); -// trivialMatchesStream.println("

    "); -// printAnnotationHTML(trivialMatchesStream, annotation, -// annotationTexts.get(annotation)); -// } -// else if(typeNontrivialMatches.contains(annotation) && -// matcher.returnsTrivials()) -// { -// writeAnnotationTextSourceHTML(nontrivialMatchesStream, annotation, -// annotationTexts.get(annotation), annotationTextNames.get(annotation)); -// nontrivialMatchesStream.println("

    "); -// printAnnotationHTML(nontrivialMatchesStream, annotation, -// annotationTexts.get(annotation)); -// } -// -// printedAnnotations.add(annotation); -// for(annotation matchedAnnotation : matchSet) -// { -// if(!matchedAnnotation.equalStartAndEnd(annotation)) -// { -// printAnnotationHTML(matchesStream, matchedAnnotation, -// annotationTexts.get(matchedAnnotation)); -// if(typeTrivialMatches.contains(matchedAnnotation) && -// matcher.returnsTrivials()) -// { -// printAnnotationHTML(trivialMatchesStream, matchedAnnotation, -// annotationTexts.get(matchedAnnotation)); -// } -// else if(typeNontrivialMatches.contains(matchedAnnotation) && -// matcher.returnsTrivials()) -// { -// printAnnotationHTML(nontrivialMatchesStream, matchedAnnotation, -// annotationTexts.get(matchedAnnotation)); -// } -// printedAnnotations.add(matchedAnnotation); -// } -// } -// } -// } -// matchesStream.flush(); matchesStream.close(); -// trivialMatchesStream.flush(); trivialMatchesStream.close(); -// nontrivialMatchesStream.flush(); nontrivialMatchesStream.close(); -// +package edu.ucdenver.ccp.knowtator.iaa.html; + +import edu.ucdenver.ccp.knowtator.iaa.AnnotationSpanIndex; +import edu.ucdenver.ccp.knowtator.iaa.IAA; +import edu.ucdenver.ccp.knowtator.iaa.matcher.Matcher; +import edu.ucdenver.ccp.knowtator.model.Annotation; +import edu.ucdenver.ccp.knowtator.model.Span; + +import java.io.File; +import java.io.IOException; +import java.io.PrintStream; +import java.text.NumberFormat; +import java.util.*; + +public class IAA2HTML { + + public static void printIAA( + IAA iaa, + Matcher matcher, + File directory, + int numberOfDocs, + Map annotationTexts, + Map annotationTextNames) + throws Exception { + NumberFormat percentageFormat = NumberFormat.getPercentInstance(); + percentageFormat.setMinimumFractionDigits(2); + + String fileName = matcher.getName(); + + PrintStream tabular = new PrintStream(new File(directory, fileName + ".dat")); + PrintStream html = new PrintStream(new File(directory, fileName + ".html")); + + initHTML(html, matcher.getName(), null, null, matcher.getDescription()); + + printIntro(html, iaa, numberOfDocs, fileName, matcher); + html.println("

    "); + printTitleRowForAllwayIAA(html, matcher); + + tabular.println( + "This test_project is provided to facilitate cut-n-paste into a spreadsheet.\n" + + "If you cannot directly copy the data below into a spreadsheet without it all going into a single cell,\n" + + "then try copying to a text editor first and then copy it from there. There is typically a 'paste special'\n" + + "option under the Edit menu that will allow you to paste the copied data as text. This will also work.\n\n\n"); + + if (matcher.returnsTrivials()) + tabular.println( + "type\tmatches\ttrivial matches\tnon-trivial matches\tnon-matches\ttrivial non-matches\tnon-trivial non-matches"); + else tabular.println("type\tmatches\tnon-matches"); + + Set classes = iaa.getAnnotationClasses(); + Set sets = iaa.getSetNames(); + + Map> allwayMatches = iaa.getAllwayMatches(); + Map> nontrivialAllwayMatches = iaa.getNontrivialAllwayMatches(); + Map> trivialAllwayMatches = iaa.getTrivialAllwayMatches(); + Map> allwayNonmatches = iaa.getAllwayNonmatches(); + Map> nontrivialAllwayNonmatches = iaa.getNontrivialAllwayNonmatches(); + Map> trivialAllwayNonmatches = iaa.getTrivialAllwayNonmatches(); + + Set allwayMatchesSingleSet = getSingleSet(allwayMatches); + Set trivialAllwayMatchesSingleSet = getSingleSet(trivialAllwayMatches); + Set nontrivialAllwayMatchesSingleSet = getSingleSet(nontrivialAllwayMatches); + Set allwayNonmatchesSingleSet = getSingleSet(allwayNonmatches); + Set trivialAllwayNonmatchesSingleSet = getSingleSet(trivialAllwayNonmatches); + Set nontrivialAllwayNonmatchesSingleSet = getSingleSet(nontrivialAllwayNonmatches); + + AnnotationSpanIndex spanIndex = new AnnotationSpanIndex(allwayNonmatchesSingleSet); + + int totalAllwayMatches = allwayMatchesSingleSet.size(); + int totalTrivialAllwayMatches = trivialAllwayMatchesSingleSet.size(); + int totalNontrivialAllwayMatches = nontrivialAllwayMatchesSingleSet.size(); + int totalAllwayNonmatches = allwayNonmatchesSingleSet.size(); + int totalTrivialAllwayNonmatches = trivialAllwayNonmatchesSingleSet.size(); + int totalNontrivialAllwayNonmatches = nontrivialAllwayNonmatchesSingleSet.size(); + + double iaaScore = + (double) totalAllwayMatches + / ((double) totalAllwayMatches + (double) totalAllwayNonmatches); + double stingyIAAScore = + (double) totalNontrivialAllwayMatches + / ((double) totalAllwayMatches + (double) totalAllwayNonmatches); + double respectableIAAScore = + (double) totalNontrivialAllwayMatches + / ((double) totalNontrivialAllwayMatches + (double) totalAllwayNonmatches); + double nontrivialIAAScore = + (double) totalNontrivialAllwayMatches + / ((double) totalNontrivialAllwayMatches + (double) totalNontrivialAllwayNonmatches); + + if (matcher.returnsTrivials()) { + html.println( + "All classes" + + "" + + percentageFormat.format(iaaScore) + + "" + + "" + + percentageFormat.format(stingyIAAScore) + + "" + + "" + + percentageFormat.format(respectableIAAScore) + + "" + + "" + + percentageFormat.format(nontrivialIAAScore) + + "" + + "" + + totalAllwayMatches + + "" + + "" + + totalTrivialAllwayMatches + + "" + + "" + + totalNontrivialAllwayMatches + + "" + + "" + + totalAllwayNonmatches + + "" + + "" + + totalTrivialAllwayNonmatches + + "" + + "" + + totalNontrivialAllwayNonmatches + + ""); + tabular.println( + "All classes\t" + + totalAllwayMatches + + "\t" + + totalTrivialAllwayMatches + + "\t" + + totalNontrivialAllwayMatches + + "\t" + + totalAllwayNonmatches + + "\t" + + totalTrivialAllwayNonmatches + + "\t" + + totalNontrivialAllwayNonmatches); + } else { + html.println( + "All classes" + + "" + + percentageFormat.format(iaaScore) + + "" + + "" + + totalAllwayMatches + + "" + + "" + + totalAllwayNonmatches + + ""); + tabular.println("All classes\t" + totalAllwayMatches + "\t" + totalAllwayNonmatches); + } + + Map> sortedAllwayMatches = sortByType(classes, allwayMatchesSingleSet); + Map> sortedAllwayTrivialMatches = + sortByType(classes, trivialAllwayMatchesSingleSet); + Map> sortedAllwayNontrivialMatches = + sortByType(classes, nontrivialAllwayMatchesSingleSet); + Map> sortedAllwayNonmatches = + sortByType(classes, allwayNonmatchesSingleSet); + Map> sortedAllwayTrivialNonmatches = + sortByType(classes, trivialAllwayNonmatchesSingleSet); + Map> sortedAllwayNontrivialNonmatches = + sortByType(classes, nontrivialAllwayNonmatchesSingleSet); + + List sortedTypes = new ArrayList<>(classes); + Collections.sort(sortedTypes); + + for (String type : sortedTypes) { + int classMatches = sortedAllwayMatches.get(type).size(); + int classTrivialMatches = sortedAllwayTrivialMatches.get(type).size(); + int classNontrivialMatches = sortedAllwayNontrivialMatches.get(type).size(); + int classNonmatches = sortedAllwayNonmatches.get(type).size(); + int classTrivialNonmatches = sortedAllwayTrivialNonmatches.get(type).size(); + int classNontrivialNonmatches = sortedAllwayNontrivialNonmatches.get(type).size(); + + iaaScore = (double) classMatches / ((double) classMatches + (double) classNonmatches); + stingyIAAScore = + (double) classNontrivialMatches / ((double) classMatches + (double) classNonmatches); + respectableIAAScore = + (double) classNontrivialMatches + / ((double) classNontrivialMatches + (double) classNonmatches); + nontrivialIAAScore = + (double) classNontrivialMatches + / ((double) classNontrivialMatches + (double) classNontrivialNonmatches); + + if (matcher.returnsTrivials()) { + html.println( + "" + + type + + "" + + "" + + percentageFormat.format(iaaScore) + + "" + + "" + + percentageFormat.format(stingyIAAScore) + + "" + + "" + + percentageFormat.format(respectableIAAScore) + + "" + + "" + + percentageFormat.format(nontrivialIAAScore) + + "" + + "" + + classMatches + + "" + + "" + + classTrivialMatches + + "" + + "" + + classNontrivialMatches + + "" + + "" + + classNonmatches + + "" + + "" + + classTrivialNonmatches + + "" + + "" + + classNontrivialNonmatches + + ""); + tabular.println( + type + + "\t" + + classMatches + + "\t" + + classTrivialMatches + + "\t" + + classNontrivialMatches + + "\t" + + classNonmatches + + "\t" + + classTrivialNonmatches + + "\t" + + classNontrivialNonmatches); + } else { + html.println( + "" + + type + + "" + + "" + + percentageFormat.format(iaaScore) + + "" + + "" + + classMatches + + "" + + "" + + classNonmatches + + ""); + tabular.println(type + "\t" + classMatches + "\t" + classNonmatches); + } + } + html.println(""); + + printMatchData( + html, + sets, + fileName, + directory, + allwayMatches, + classes, + sortedTypes, + annotationTexts, + annotationTextNames, + matcher, + trivialAllwayMatches, + nontrivialAllwayMatches, + iaa); + + printNonmatchData( + html, + sets, + fileName, + directory, + allwayNonmatches, + classes, + spanIndex, + sortedTypes, + annotationTexts, + annotationTextNames, + matcher, + trivialAllwayNonmatches, + nontrivialAllwayNonmatches); + + Map>> pairwiseMatches = iaa.getPairwiseMatches(); + Map>> pairwiseNonmatches = iaa.getPairwiseNonmatches(); + + printPairwiseAgreement(html, sets, pairwiseMatches, pairwiseNonmatches, percentageFormat); + + html.flush(); + html.close(); + tabular.flush(); + tabular.close(); + } + + private static void printMatchData( + PrintStream html, + Set sets, + String fileName, + File directory, + Map> allwayMatches, + Set classes, + List sortedTypes, + Map annotationTexts, + Map annotationTextNames, + Matcher matcher, + Map> trivialAllwayMatches, + Map> nontrivialAllwayMatches, + IAA iaa) + throws Exception { + html.println("

    match data

    "); + html.println("
      "); + + Map> matchSets = iaa.getAllwayMatchSets(); + + for (String set : sets) { + String matchesFileName = fileName + ".matches." + set + ".html"; + html.println("
    • matches for " + set + "
    • "); + PrintStream matchesStream = new PrintStream(new File(directory, matchesFileName)); + Set matches = allwayMatches.get(set); + Map> sortedMatches = sortByType(classes, matches); + + initHTML( + matchesStream, + "Matches for " + set, + fileName + ".html", + fileName, + "Each annotation that was considered a match is shown in the text that it was found in. The matching annotations from the other annotation sets are also shown."); + printInstances( + matchesStream, + sortedMatches, + sortedTypes, + annotationTexts, + annotationTextNames, + matchSets); + matchesStream.flush(); + matchesStream.close(); + + if (matcher.returnsTrivials()) { + String trivialMatchesFileName = fileName + ".trivial.matches." + set + ".html"; + html.println( + "
    • trivial matches for " + + set + + "
    • "); + PrintStream trivialMatchesStream = + new PrintStream(new File(directory, trivialMatchesFileName)); + Set trivialMatches = trivialAllwayMatches.get(set); + Map> sortedTrivialMatches = sortByType(classes, trivialMatches); + initHTML( + trivialMatchesStream, + "Trivial matches for " + set, + fileName + ".html", + fileName, + "Each annotation that was considered a trival match is shown in the text that it was found in. The matching annotations from the other annotation sets are also shown."); + printInstances( + trivialMatchesStream, + sortedTrivialMatches, + sortedTypes, + annotationTexts, + annotationTextNames, + matchSets); + trivialMatchesStream.flush(); + trivialMatchesStream.close(); + + String nontrivialMatchesFileName = fileName + ".nontrivial.matches." + set + ".html"; + html.println( + "
    • non-trivial matches for " + + set + + "
    • "); + PrintStream nontrivialMatchesStream = + new PrintStream(new File(directory, nontrivialMatchesFileName)); + Set nontrivialMatches = nontrivialAllwayMatches.get(set); + Map> sortedNontrivialMatches = + sortByType(classes, nontrivialMatches); + initHTML( + nontrivialMatchesStream, + "non-trivial non-matches for " + set, + fileName + ".html", + fileName, + "Each annotation that was considered a non-trival match is shown in the text that it was found in. The matching from the other annotation sets are also shown."); + printInstances( + nontrivialMatchesStream, + sortedNontrivialMatches, + sortedTypes, + annotationTexts, + annotationTextNames, + matchSets); + nontrivialMatchesStream.flush(); + nontrivialMatchesStream.close(); + } + } + html.println("

    "); + } + + private static void printNonmatchData( + PrintStream html, + Set sets, + String fileName, + File directory, + Map> allwayNonmatches, + Set classes, + AnnotationSpanIndex spanIndex, + List sortedTypes, + Map annotationTexts, + Map annotationTextNames, + Matcher matcher, + Map> trivialAllwayNonmatches, + Map> nontrivialAllwayNonmatches) + throws Exception { + html.println("

    non-match data

    "); + html.println("
      "); + + for (String set : sets) { + String errorsFileName = fileName + ".nonmatches." + set + ".html"; + html.println("
    • non-matches for " + set + "
    • "); + PrintStream errors = new PrintStream(new File(directory, errorsFileName)); + Set nonmatches = allwayNonmatches.get(set); + Map> sortedNonmatches = sortByType(classes, nonmatches); + + Map> comparisonAnnotations = new HashMap<>(); + for (Annotation nonmatch : nonmatches) { + comparisonAnnotations.put(nonmatch, getCandidateAnnotations(nonmatch, spanIndex)); + } + + initHTML( + errors, + "Non-matches for " + set, + fileName + ".html", + fileName, + "Each annotation that was considered a non-match is shown in the text that it was found in. Overlapping annotations from the other annotation sets are also shown."); + printInstances( + errors, + sortedNonmatches, + sortedTypes, + annotationTexts, + annotationTextNames, + comparisonAnnotations); + errors.flush(); + errors.close(); + + if (matcher.returnsTrivials()) { + String trivialNonMatchesFileName = fileName + ".trivial.nonmatches." + set + ".html"; + html.println( + "
    • trivial non-matches for " + + set + + "
    • "); + PrintStream trivialErrors = new PrintStream(new File(directory, trivialNonMatchesFileName)); + Set trivialNonmatches = trivialAllwayNonmatches.get(set); + Map> sortedTrivialNonmatches = + sortByType(classes, trivialNonmatches); + initHTML( + trivialErrors, + "Trivial non-matches for " + set, + fileName + ".html", + fileName, + "Each annotation that was considered a trival non-match is shown in the text that it was found in. Overlapping annotations from the other annotation sets are also shown."); + printInstances( + trivialErrors, + sortedTrivialNonmatches, + sortedTypes, + annotationTexts, + annotationTextNames, + comparisonAnnotations); + trivialErrors.flush(); + trivialErrors.close(); + + String nontrivialNonMatchesFileName = fileName + ".nontrivial.nonmatches." + set + ".html"; + html.println( + "
    • non-trivial non-matches for " + + set + + "
    • "); + PrintStream nontrivialErrors = + new PrintStream(new File(directory, nontrivialNonMatchesFileName)); + Set nontrivialNonmatches = nontrivialAllwayNonmatches.get(set); + Map> sortedNontrivialNonmatches = + sortByType(classes, nontrivialNonmatches); + initHTML( + nontrivialErrors, + "non-trivial non-matches for " + set, + fileName + ".html", + fileName, + "Each annotation that was considered a non-trival non-match is shown in the text that it was found in. Overlapping annotations from the other annotation sets are also shown."); + printInstances( + nontrivialErrors, + sortedNontrivialNonmatches, + sortedTypes, + annotationTexts, + annotationTextNames, + comparisonAnnotations); + nontrivialErrors.flush(); + nontrivialErrors.close(); + } + } + html.println("

    "); + } + + private static Set getCandidateAnnotations( + Annotation annotation, AnnotationSpanIndex spanIndex) { + Set candidateAnnotations = new HashSet<>(); + String set = annotation.getAnnotator().getId(); + String docID = annotation.getTextSource().getId(); + + Set overlappingAnnotations = spanIndex.getOverlappingAnnotations(annotation); + for (Annotation overlappingAnnotation : overlappingAnnotations) { + String candidateAnnotationSet = overlappingAnnotation.getAnnotator().getId(); + if (!candidateAnnotationSet.equals(set)) { + String candidateDocID = overlappingAnnotation.getTextSource().getId(); + if (candidateDocID.equals(docID)) { + candidateAnnotations.add(overlappingAnnotation); + } + } + } + return candidateAnnotations; + } + + private static void printInstances( + PrintStream out, + Map> sortedAnnotations, + List sortedTypes, + Map annotationTexts, + Map annotationTextNames, + Map> comparisonAnnotations) { + for (String type : sortedTypes) { + out.println("

    " + type + "

    "); + Set typeAnnotations = sortedAnnotations.get(type); + for (Annotation annotation : typeAnnotations) { + writeAnnotationTextSourceHTML( + out, annotation, annotationTexts.get(annotation), annotationTextNames.get(annotation)); + out.println("
    • "); + printAnnotationHTML(out, annotation, annotationTexts.get(annotation)); + + Set comparisons = comparisonAnnotations.get(annotation); + if (comparisons != null) { + for (Annotation comparisonAnnotation : comparisons) { + if (!comparisonAnnotation.equals(annotation)) { + out.println("
    • "); + printAnnotationHTML( + out, comparisonAnnotation, annotationTexts.get(comparisonAnnotation)); + } + } + } + out.println("
    "); + } + } + } + + static Set getSingleSet(Map> annotations) { + Set returnValues = new HashSet<>(); + for (String setName : annotations.keySet()) { + returnValues.addAll(annotations.get(setName)); + } + return returnValues; + } + + private static void initHTML( + PrintStream html, String title, String link, String linkLabel, String description) { + html.println(""); + html.println("" + title + ""); + html.println(""); + if (link != null) html.println("" + linkLabel + ""); + html.println("

    " + title + "

    "); + html.println(description); + html.println("
    "); + } + + static Map> sortByType( + Set types, Collection annotations) { + Map> sortedAnnotations = new HashMap<>(); + + for (String type : types) { + sortedAnnotations.put(type, new HashSet<>()); + } + for (Annotation annotation : annotations) { + String type = annotation.getOwlClass().toString(); + sortedAnnotations.get(type).add(annotation); + } + return sortedAnnotations; + } + + private static void writeAnnotationTextSourceHTML( + PrintStream out, Annotation annotation, String annotationText, String annotationTextName) { + StringBuilder html = new StringBuilder("

    "); + if (annotationTextName != null) + html.append("Text source docID = ").append(annotationTextName).append("

    "); + + if (annotationText != null) { + TreeSet spans = annotation.getSpanCollection().getCollection(); + List modifiedSpans = new ArrayList<>(spans); + + annotationText = shortenText(annotationText, modifiedSpans); + + int mark = 0; + + for (Span span : modifiedSpans) { + try { + //noinspection RedundantStringOperation + html.append(annotationText.substring(mark, span.getStart())).append(""); + html.append(Span.substring(annotationText, span)).append(""); + mark = span.getEnd(); + } catch (StringIndexOutOfBoundsException sioobe) { + sioobe.printStackTrace(); + } + } + if (mark < annotationText.length()) html.append(annotationText.substring(mark)); + } + out.println(html.toString()); + } + + private static String shortenText(String text, java.util.List spans) { + int frontBuffer = 150; + int endBuffer = 150; + if (spans.size() > 0) { + Span span = spans.get(0); + int start = Math.max(0, span.getStart() - frontBuffer); + int end = Math.min(text.length(), span.getEnd() + endBuffer); + String substring = text.substring(start, end); + + for (int i = 0; i < spans.size(); i++) { + span = spans.get(i); + Span offsetSpan = new Span(span.getStart() - start, span.getEnd() - start); + spans.set(i, offsetSpan); + } + return substring; + } + return text; + } + + private static void printAnnotationHTML( + PrintStream out, Annotation annotation, String annotationText) { + StringBuilder html = new StringBuilder(); + + if (annotationText != null) { + String coveredText = IAA.getCoveredText(annotation, annotationText, " ... "); + html.append(coveredText); + } + html.append(" ").append(annotation.toHTML()); + out.print(html.toString()); + } + + private static void printIntro( + PrintStream html, IAA iaa, int numberOfDocs, String fileName, Matcher matcher) { + html.println( + "

    For more detailed documentation on IAA please see the " + + "IAA documentation."); + + html.println("

    "); + html.println("

    " + iaa.getSetNames().size() + "-way IAA Results

    "); + html.println("IAA calculated on " + numberOfDocs + " documents."); + html.println("

    tabular data"); + html.println("

    all annotations = matches + non-matches"); + html.println("
    IAA = matches / all annotations"); + if (matcher.returnsTrivials()) { + html.println("
    stingy IAA = non-trivial matches / (matches + non-matches)"); + html.println( + "
    respectable IAA = non-trivial matches / (non-trivial matches + non-matches)"); + html.println( + "
    non-trivial IAA = non-trivial matches / (non-trivial matches + non-trivial non-matches)"); + } + } + + private static void printTitleRowForAllwayIAA(PrintStream html, Matcher matcher) { + html.println("" + ""); + if (matcher.returnsTrivials()) { + html.println( + "" + + "" + + ""); + } + html.println(""); + if (matcher.returnsTrivials()) { + html.println("" + ""); + } + html.println(""); + if (matcher.returnsTrivials()) { + html.println( + "" + ""); + } + html.println(""); + } + + static String initHTML(String title, String description) { + return "\n" + + "" + + title + + "\n" + + "\n" + + "

    " + + title + + "

    \n" + + description + + " For more detailed documentation on IAA please see the IAA documentation.\n"; + } + + static void printMatchData( + PrintStream html, + Set sets, + String fileName, + File directory, + Map> allwayMatches, + Map annotationTexts, + Map annotationTextNames, + Set classes, + IAA iaa) + throws IOException { + + html.println("

    match data

    "); + html.println("
      "); + + Map> matchSets = iaa.getAllwayMatchSets(); + List sortedTypes = new ArrayList<>(classes); + Collections.sort(sortedTypes); + + for (String set : sets) { + String matchesFileName = fileName + ".matches." + set + ".html"; + html.println("
    • matches for " + set + "
    • "); + PrintStream matchesStream = new PrintStream(new File(directory, matchesFileName)); + Set matches = allwayMatches.get(set); + Map> sortedMatches = IAA2HTML.sortByType(classes, matches); + + matchesStream.println( + initHTML( + "Matches for " + set, + "Each annotation that was considered a match is shown in the text that it was found in. The matching annotations from the other annotation sets are also shown.")); + IAA2HTML.printInstances( + matchesStream, + sortedMatches, + sortedTypes, + annotationTexts, + annotationTextNames, + matchSets); + matchesStream.flush(); + matchesStream.close(); + } + html.println("

    "); + } + + static void printNonmatchData( + PrintStream html, + Set sets, + String fileName, + File directory, + Map> allwayNonmatches, + AnnotationSpanIndex spanIndex, + Map annotationTexts, + Map annotationTextNames, + Set classes) + throws IOException { + html.println("

    non-match data

    "); + html.println("
      "); + + List sortedTypes = new ArrayList<>(classes); + Collections.sort(sortedTypes); + + for (String set : sets) { + String errorsFileName = fileName + ".nonmatches." + set + ".html"; + html.println("
    • non-matches for " + set + "
    • "); + PrintStream errors = new PrintStream(new File(directory, errorsFileName)); + Set nonmatches = allwayNonmatches.get(set); + Map> sortedNonmatches = IAA2HTML.sortByType(classes, nonmatches); + + Map> comparisonAnnotations = new HashMap<>(); + for (Annotation nonmatch : nonmatches) { + comparisonAnnotations.put(nonmatch, IAA2HTML.getCandidateAnnotations(nonmatch, spanIndex)); + } + + errors.println( + initHTML( + "Non-matches for " + set, + "Each annotation that was considered a non-match is shown in the text that it was found in. Overlapping annotations from the other annotation sets are also shown.")); + IAA2HTML.printInstances( + errors, + sortedNonmatches, + sortedTypes, + annotationTexts, + annotationTextNames, + comparisonAnnotations); + errors.flush(); + errors.close(); + } + html.println("

    "); + } + + static void printPairwiseAgreement( + PrintStream html, + Set sets, + Map>> pairwiseMatches, + Map>> pairwiseNonmatches, + NumberFormat percentageFormat) { + html.println("

    Pair-wise agreement

    "); + html.println( + "
    TypeIAAstingy IAArespectable IAAnon-trivial IAAmatchestrivial matchesnon-trivial matchesnon-matchestrivial non-matchesnon-trivial non-matches
    " + + "" + + "" + + "" + + "" + + "" + + "" + + ""); + + for (String setName : sets) { + for (String setName2 : sets) { + + if (!setName.equals(setName2)) { + Set truePositives = pairwiseMatches.get(setName).get(setName2); + Set falseNegatives = pairwiseNonmatches.get(setName).get(setName2); + Set falsePositives = pairwiseNonmatches.get(setName2).get(setName); + double precision = + (double) truePositives.size() + / ((double) truePositives.size() + (double) falsePositives.size()); + double recall = + (double) truePositives.size() + / ((double) truePositives.size() + (double) falseNegatives.size()); + double f_score = ((double) 2 * precision * recall) / (recall + precision); + + html.println( + "" + + "" + + "" + + "" + + "" + + "" + + "" + + ""); + } + } + } + html.println("
    Gold standard setcompared settrue positivesfalse positivesfalse negativesprecisionrecallF-score
    " + + setName + + "" + + setName2 + + "" + + truePositives.size() + + "" + + falsePositives.size() + + "" + + falseNegatives.size() + + "" + + percentageFormat.format(precision) + + "" + + percentageFormat.format(recall) + + "" + + percentageFormat.format(f_score) + + "
    "); + html.println("Precision and recall are given equal weight for the F-score."); + } +} + +// for(String type : sortedTypes) +// { +// errors.println("

    "+type+"

    "); +// Set typeNonmatches = sortedNonmatches.get(type); +// for(annotation annotation : typeNonmatches) +// { +// String docID = annotation.getId(); +// writeAnnotationTextSourceHTML(errors, annotation, +// annotationTexts.get(annotation), annotationTextNames.get(annotation)); +// errors.println("
    • "); +// printAnnotationHTML(errors, annotation, annotationTexts.get(annotation)); +// +// Set candidateAnnotations = +// spanIndex.getOverlappingAnnotations(annotation); +// for(annotation candidateAnnotation : candidateAnnotations) +// { +// String candidateAnnotationSet = candidateAnnotation.getId(); +// if(!candidateAnnotationSet.equalStartAndEnd(set)) +// { +// String candidateDocID = candidateAnnotation.getId(); +// if(candidateDocID.equalStartAndEnd(docID)) +// { +// errors.println("
    • "); +// printAnnotationHTML(errors, candidateAnnotation, +// annotationTexts.get(candidateAnnotation)); +// } +// } +// } +// errors.println("
    "); +// } +// } + +// for(String set : sets) +// { +// String matchesFileName = fileName+".matches."+set+".html"; +// html.println("
  • matches for "+set+"
  • " +// ); +// PrintStream matchesStream = new PrintStream(new File(directory, +// matchesFileName)); +// Set matches = allwayMatches.get(set); +// Map> sortedMatches = sortByType(classes, matches); +// Map> matchSets = new HashMap>(); +// for(annotation nonmatch : nonmatches) +// { +// comparisonAnnotations.put(nonmatch, getCandidateAnnotations(nonmatch, +// spanIndex)); +// } +// +// initHTML(errors, "Non-matches for "+set, fileName+".html", fileName, +// "Each annotation that was considered a non-match is shown in the text that it was found in. +// Overlapping annotations from the other annotation sets are also shown." +// ); +// printInstances(errors, sortedNonmatches, sortedTypes, annotationTexts, +// annotationTextNames, comparisonAnnotations); +// errors.flush(); errors.close(); +// } + +// String matchesFileName = fileName+".matches.html"; +// String trivialMatchesFileName = fileName+".trivial.matches.html"; +// String nontrivialMatchesFileName = fileName+".nontrivial.matches.html"; +// PrintStream matchesStream = new PrintStream(new File(directory, +// matchesFileName)); +// PrintStream trivialMatchesStream = new PrintStream(new File(directory, +// trivialMatchesFileName)); +// PrintStream nontrivialMatchesStream = new PrintStream(new File(directory, +// nontrivialMatchesFileName)); +// +// html.println("

    match data

    "); +// html.println(""); +// +// Map> matchSets = iaa.getAllwayMatchSets(); +// initHTML(matchesStream, "Matches", fileName+".html", fileName, +// "Each annotation that was considered a match is shown in the text that it was found in. +// Annotations from each of annotation sets are shown because there may be differences in the +// individual annotations if the match criteria ignored those differences. Only one of the +// annotation's spans are bolded in the text." +// ); +// if(matcher.returnsTrivials()) +// { +// initHTML(trivialMatchesStream, "Trivial matches", fileName+".html", fileName, +// "Each annotation that was considered a match is shown in the text that it was found in. +// Annotations from each of annotation sets are shown because there may be differences in the +// individual annotations if the match criteria ignored those differences. Only one of the +// annotation's spans are bolded in the text." +// ); +// initHTML(nontrivialMatchesStream, "Non-trivial matches", fileName+".html", +// fileName, +// "Each annotation that was considered a match is shown in the text that it was found in. +// Annotations from each of annotation sets are shown because there may be differences in the +// individual annotations if the match criteria ignored those differences. Only one of the +// annotation's Span is bolded in the text." +// ); +// } +// +// Set printedAnnotations = new HashSet(); +// for(String type : sortedTypes) +// { +// matchesStream.println("

    "+type+"

    "); +// trivialMatchesStream.println("

    "+type+"

    "); +// nontrivialMatchesStream.println("

    "+type+"

    "); +// +// Set typeTrivialMatches = sortedAllwayTrivialMatches.get(type); +// Set typeNontrivialMatches = +// sortedAllwayNontrivialMatches.get(type); +// Set typeMatches = sortedAllwayMatches.get(type); +// +// for(annotation annotation : typeMatches) +// { +// if(printedAnnotations.contains(annotation)) continue; +// Set matchSet = matchSets.get(annotation); +// +// writeAnnotationTextSourceHTML(matchesStream, annotation, +// annotationTexts.get(annotation), annotationTextNames.get(annotation)); +// matchesStream.println("

    "); +// printAnnotationHTML(matchesStream, annotation, +// annotationTexts.get(annotation)); +// if(typeTrivialMatches.contains(annotation) && matcher.returnsTrivials()) +// { +// writeAnnotationTextSourceHTML(trivialMatchesStream, annotation, +// annotationTexts.get(annotation), annotationTextNames.get(annotation)); +// trivialMatchesStream.println("

    "); +// printAnnotationHTML(trivialMatchesStream, annotation, +// annotationTexts.get(annotation)); +// } +// else if(typeNontrivialMatches.contains(annotation) && +// matcher.returnsTrivials()) +// { +// writeAnnotationTextSourceHTML(nontrivialMatchesStream, annotation, +// annotationTexts.get(annotation), annotationTextNames.get(annotation)); +// nontrivialMatchesStream.println("

    "); +// printAnnotationHTML(nontrivialMatchesStream, annotation, +// annotationTexts.get(annotation)); +// } +// +// printedAnnotations.add(annotation); +// for(annotation matchedAnnotation : matchSet) +// { +// if(!matchedAnnotation.equalStartAndEnd(annotation)) +// { +// printAnnotationHTML(matchesStream, matchedAnnotation, +// annotationTexts.get(matchedAnnotation)); +// if(typeTrivialMatches.contains(matchedAnnotation) && +// matcher.returnsTrivials()) +// { +// printAnnotationHTML(trivialMatchesStream, matchedAnnotation, +// annotationTexts.get(matchedAnnotation)); +// } +// else if(typeNontrivialMatches.contains(matchedAnnotation) && +// matcher.returnsTrivials()) +// { +// printAnnotationHTML(nontrivialMatchesStream, matchedAnnotation, +// annotationTexts.get(matchedAnnotation)); +// } +// printedAnnotations.add(matchedAnnotation); +// } +// } +// } +// } +// matchesStream.flush(); matchesStream.close(); +// trivialMatchesStream.flush(); trivialMatchesStream.close(); +// nontrivialMatchesStream.flush(); nontrivialMatchesStream.close(); +// diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/io/BasicIOUtil.java b/src/main/java/edu/ucdenver/ccp/knowtator/io/BasicIOUtil.java index 53cb3d15..76c590da 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/io/BasicIOUtil.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/io/BasicIOUtil.java @@ -1,12 +1,12 @@ -package edu.ucdenver.ccp.knowtator.io; - -import edu.ucdenver.ccp.knowtator.model.Savable; - -import java.io.File; -import java.io.IOException; - -public interface BasicIOUtil { - void read(Savable savable, File file) throws IOException; - - void write(Savable savable, File file) throws IOException; -} +package edu.ucdenver.ccp.knowtator.io; + +import edu.ucdenver.ccp.knowtator.model.Savable; + +import java.io.File; +import java.io.IOException; + +public interface BasicIOUtil { + void read(Savable savable, File file) throws IOException; + + void write(Savable savable, File file) throws IOException; +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/io/XMLUtil.java b/src/main/java/edu/ucdenver/ccp/knowtator/io/XMLUtil.java index d01b7400..21b2a4ef 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/io/XMLUtil.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/io/XMLUtil.java @@ -1,59 +1,59 @@ -package edu.ucdenver.ccp.knowtator.io; - -import org.w3c.dom.Document; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; -import java.io.*; -import java.util.AbstractList; -import java.util.Collections; -import java.util.List; -import java.util.RandomAccess; - -public class XMLUtil { - public static List asList(NodeList n) { - return n.getLength() == 0 ? Collections.emptyList() : new NodeListWrapper(n); - } - - protected static void finishWritingXML(Document dom, File file) { - try { - Transformer tr = TransformerFactory.newInstance().newTransformer(); - tr.setOutputProperty(OutputKeys.INDENT, "yes"); - tr.setOutputProperty(OutputKeys.METHOD, "xml"); - tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); - tr.setOutputProperty("{http://knowtator.apache.org/xslt}indent-amount", "4"); - - // send DOM to test_project - PrintWriter pw = new PrintWriter(file); - pw.close(); - OutputStream os = new FileOutputStream(file, false); - tr.transform(new DOMSource(dom), new StreamResult(os)); - os.close(); - - } catch (TransformerException | IOException te) { - System.out.println(te.getMessage()); - } - } - - static final class NodeListWrapper extends AbstractList implements RandomAccess { - final NodeList list; - - NodeListWrapper(NodeList l) { - list = l; - } - - public Node get(int index) { - return list.item(index); - } - - public int size() { - return list.getLength(); - } - } -} +package edu.ucdenver.ccp.knowtator.io; + +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import java.io.*; +import java.util.AbstractList; +import java.util.Collections; +import java.util.List; +import java.util.RandomAccess; + +public class XMLUtil { + public static List asList(NodeList n) { + return n.getLength() == 0 ? Collections.emptyList() : new NodeListWrapper(n); + } + + protected static void finishWritingXML(Document dom, File file) { + try { + Transformer tr = TransformerFactory.newInstance().newTransformer(); + tr.setOutputProperty(OutputKeys.INDENT, "yes"); + tr.setOutputProperty(OutputKeys.METHOD, "xml"); + tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + tr.setOutputProperty("{http://knowtator.apache.org/xslt}indent-amount", "4"); + + // send DOM to test_project + PrintWriter pw = new PrintWriter(file); + pw.close(); + OutputStream os = new FileOutputStream(file, false); + tr.transform(new DOMSource(dom), new StreamResult(os)); + os.close(); + + } catch (TransformerException | IOException te) { + System.out.println(te.getMessage()); + } + } + + static final class NodeListWrapper extends AbstractList implements RandomAccess { + final NodeList list; + + NodeListWrapper(NodeList l) { + list = l; + } + + public Node get(int index) { + return list.item(index); + } + + public int size() { + return list.getLength(); + } + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/io/brat/BratStandoffUtil.java b/src/main/java/edu/ucdenver/ccp/knowtator/io/brat/BratStandoffUtil.java index 68d10cff..4814e92b 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/io/brat/BratStandoffUtil.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/io/brat/BratStandoffUtil.java @@ -1,93 +1,93 @@ -package edu.ucdenver.ccp.knowtator.io.brat; - -import edu.ucdenver.ccp.knowtator.io.BasicIOUtil; -import edu.ucdenver.ccp.knowtator.model.Savable; -import edu.ucdenver.ccp.knowtator.model.TextSourceManager; -import org.apache.commons.io.FilenameUtils; -import org.apache.log4j.Logger; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.IntStream; -import java.util.stream.Stream; - -public class BratStandoffUtil implements BasicIOUtil { - private static final Logger log = Logger.getLogger(BratStandoffUtil.class); - - private static Map> collectAnnotations(Stream standoffStream) { - Map> annotationCollector = createAnnotationCollector(); - - standoffStream.forEach( - line -> { - if (!line.trim().isEmpty()) { - String[] entries = line.split(StandoffTags.columnDelimiter); - char annotationType = entries[0].charAt(0); - annotationCollector.get(annotationType).add(entries); - } - }); - - return annotationCollector; - } - - private static Map> createAnnotationCollector() { - Map> annotationCollector = new HashMap<>(); - IntStream.range(0, StandoffTags.tagList.length) - .mapToObj(i -> StandoffTags.tagList[i]) - .forEach(tag -> annotationCollector.put(tag, new ArrayList<>())); - - return annotationCollector; - } - - @Override - public void read(Savable textSourceManager, File file) { - try { - Stream standoffStream = Files.lines(Paths.get(file.toURI())); - - Map> annotationMap = collectAnnotations(standoffStream); - - annotationMap - .get(StandoffTags.DOCID) - .add(new String[]{FilenameUtils.getBaseName(file.getName())}); - - textSourceManager.readFromBratStandoff(file, annotationMap, null); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Override - public void write(Savable savable, File file) { - if (savable instanceof TextSourceManager) { - ((TextSourceManager) savable) - .getTextSourceCollection() - .getCollection() - .forEach( - textSource -> { - File outputFile = - new File(file.getAbsolutePath() + File.separator + textSource.getId() + ".ann"); - writeToOutputFile(textSource, outputFile); - }); - } else { - writeToOutputFile(savable, file); - } - } - - private void writeToOutputFile(Savable savable, File file) { - try { - log.warn("Writing to " + file.getAbsolutePath()); - BufferedWriter bw = new BufferedWriter(new FileWriter(file)); - savable.writeToBratStandoff(bw); - bw.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } -} +package edu.ucdenver.ccp.knowtator.io.brat; + +import edu.ucdenver.ccp.knowtator.io.BasicIOUtil; +import edu.ucdenver.ccp.knowtator.model.Savable; +import edu.ucdenver.ccp.knowtator.model.TextSourceManager; +import org.apache.commons.io.FilenameUtils; +import org.apache.log4j.Logger; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.IntStream; +import java.util.stream.Stream; + +public class BratStandoffUtil implements BasicIOUtil { + private static final Logger log = Logger.getLogger(BratStandoffUtil.class); + + private static Map> collectAnnotations(Stream standoffStream) { + Map> annotationCollector = createAnnotationCollector(); + + standoffStream.forEach( + line -> { + if (!line.trim().isEmpty()) { + String[] entries = line.split(StandoffTags.columnDelimiter); + char annotationType = entries[0].charAt(0); + annotationCollector.get(annotationType).add(entries); + } + }); + + return annotationCollector; + } + + private static Map> createAnnotationCollector() { + Map> annotationCollector = new HashMap<>(); + IntStream.range(0, StandoffTags.tagList.length) + .mapToObj(i -> StandoffTags.tagList[i]) + .forEach(tag -> annotationCollector.put(tag, new ArrayList<>())); + + return annotationCollector; + } + + @Override + public void read(Savable textSourceManager, File file) { + try { + Stream standoffStream = Files.lines(Paths.get(file.toURI())); + + Map> annotationMap = collectAnnotations(standoffStream); + + annotationMap + .get(StandoffTags.DOCID) + .add(new String[]{FilenameUtils.getBaseName(file.getName())}); + + textSourceManager.readFromBratStandoff(file, annotationMap, null); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void write(Savable savable, File file) { + if (savable instanceof TextSourceManager) { + ((TextSourceManager) savable) + .getTextSourceCollection() + .getCollection() + .forEach( + textSource -> { + File outputFile = + new File(file.getAbsolutePath() + File.separator + textSource.getId() + ".ann"); + writeToOutputFile(textSource, outputFile); + }); + } else { + writeToOutputFile(savable, file); + } + } + + private void writeToOutputFile(Savable savable, File file) { + try { + log.warn("Writing to " + file.getAbsolutePath()); + BufferedWriter bw = new BufferedWriter(new FileWriter(file)); + savable.writeToBratStandoff(bw); + bw.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/io/brat/StandoffTags.java b/src/main/java/edu/ucdenver/ccp/knowtator/io/brat/StandoffTags.java index 516fd571..b1d6e9a5 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/io/brat/StandoffTags.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/io/brat/StandoffTags.java @@ -1,26 +1,26 @@ -package edu.ucdenver.ccp.knowtator.io.brat; - -/** - * Based on http://brat.nlplab.org/standoff.html - */ -@SuppressWarnings("WeakerAccess") -public class StandoffTags { - - public static final char TEXTBOUNDANNOTATION = 'T'; - public static final char RELATION = 'R'; - public static final char EVENT = 'E'; - // Note that this is not a standard tag. It is included to pass the document ID. - public static final char DOCID = 'D'; - public static final String spanDelimiter = ";"; - public static final String textBoundAnnotationTripleDelimiter = " "; - public static final String relationTripleDelimiter = " "; - public static final String relationTripleRoleIDDelimiter = ":"; - static final String columnDelimiter = "\t"; - private static final char ATTRIBUTE = 'A'; - private static final char MODIFICATION = 'M'; - private static final char NORMALIZATION = 'N'; - private static final char NOTE = '#'; - static final char[] tagList = { - TEXTBOUNDANNOTATION, RELATION, EVENT, ATTRIBUTE, MODIFICATION, NORMALIZATION, NOTE, DOCID - }; -} +package edu.ucdenver.ccp.knowtator.io.brat; + +/** + * Based on http://brat.nlplab.org/standoff.html + */ +@SuppressWarnings("WeakerAccess") +public class StandoffTags { + + public static final char TEXTBOUNDANNOTATION = 'T'; + public static final char RELATION = 'R'; + public static final char EVENT = 'E'; + // Note that this is not a standard tag. It is included to pass the document ID. + public static final char DOCID = 'D'; + public static final String spanDelimiter = ";"; + public static final String textBoundAnnotationTripleDelimiter = " "; + public static final String relationTripleDelimiter = " "; + public static final String relationTripleRoleIDDelimiter = ":"; + static final String columnDelimiter = "\t"; + private static final char ATTRIBUTE = 'A'; + private static final char MODIFICATION = 'M'; + private static final char NORMALIZATION = 'N'; + private static final char NOTE = '#'; + static final char[] tagList = { + TEXTBOUNDANNOTATION, RELATION, EVENT, ATTRIBUTE, MODIFICATION, NORMALIZATION, NOTE, DOCID + }; +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/io/genia/GeniaTags.java b/src/main/java/edu/ucdenver/ccp/knowtator/io/genia/GeniaTags.java index 37ecf301..b19482ae 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/io/genia/GeniaTags.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/io/genia/GeniaTags.java @@ -1,7 +1,7 @@ -package edu.ucdenver.ccp.knowtator.io.genia; - -public class GeniaTags { - - public static final String TERM = "term"; - public static final String SEM = "sem"; -} +package edu.ucdenver.ccp.knowtator.io.genia; + +public class GeniaTags { + + public static final String TERM = "term"; + public static final String SEM = "sem"; +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/io/genia/GeniaXMLUtil.java b/src/main/java/edu/ucdenver/ccp/knowtator/io/genia/GeniaXMLUtil.java index 88f16327..e74c67ae 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/io/genia/GeniaXMLUtil.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/io/genia/GeniaXMLUtil.java @@ -1,19 +1,19 @@ -package edu.ucdenver.ccp.knowtator.io.genia; - -import edu.ucdenver.ccp.knowtator.io.BasicIOUtil; -import edu.ucdenver.ccp.knowtator.model.Savable; - -import java.io.File; - -public class GeniaXMLUtil implements BasicIOUtil { - @Override - public void read(Savable savable, File file) { - // savable.readFromGeniaXML(null, null); - } - - @Override - public void write(Savable savable, File file) { - - // savable.writeToGeniaXML(null, null); - } -} +package edu.ucdenver.ccp.knowtator.io.genia; + +import edu.ucdenver.ccp.knowtator.io.BasicIOUtil; +import edu.ucdenver.ccp.knowtator.model.Savable; + +import java.io.File; + +public class GeniaXMLUtil implements BasicIOUtil { + @Override + public void read(Savable savable, File file) { + // savable.readFromGeniaXML(null, null); + } + + @Override + public void write(Savable savable, File file) { + + // savable.writeToGeniaXML(null, null); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/KnowtatorXMLAttributes.java b/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/KnowtatorXMLAttributes.java index a0787544..bb1a5b4a 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/KnowtatorXMLAttributes.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/KnowtatorXMLAttributes.java @@ -1,22 +1,22 @@ -package edu.ucdenver.ccp.knowtator.io.knowtator; - -public class KnowtatorXMLAttributes { - public static final String ID = "id"; - - public static final String ANNOTATOR = "annotator"; // also in OLD - public static final String TYPE = "type"; - public static final String SPAN_START = "start"; - public static final String SPAN_END = "end"; - - // Graph data - public static final String TRIPLE_SUBJECT = "subject"; - public static final String TRIPLE_OBJECT = "object"; - public static final String TRIPLE_PROPERTY = "property"; - public static final String TRIPLE_QUANTIFIER = "quantifier"; - public static final String TRIPLE_VALUE = "value"; - - // Used for saving profile settings - public static final String COLOR = "color"; - public static final String CLASS_ID = "class"; - public static final String FILE = "text-file"; -} +package edu.ucdenver.ccp.knowtator.io.knowtator; + +public class KnowtatorXMLAttributes { + public static final String ID = "id"; + + public static final String ANNOTATOR = "annotator"; // also in OLD + public static final String TYPE = "type"; + public static final String SPAN_START = "start"; + public static final String SPAN_END = "end"; + + // Graph data + public static final String TRIPLE_SUBJECT = "subject"; + public static final String TRIPLE_OBJECT = "object"; + public static final String TRIPLE_PROPERTY = "property"; + public static final String TRIPLE_QUANTIFIER = "quantifier"; + public static final String TRIPLE_VALUE = "value"; + + // Used for saving profile settings + public static final String COLOR = "color"; + public static final String CLASS_ID = "class"; + public static final String FILE = "text-file"; +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/KnowtatorXMLTags.java b/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/KnowtatorXMLTags.java index fc769923..d5b6aedf 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/KnowtatorXMLTags.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/KnowtatorXMLTags.java @@ -1,15 +1,15 @@ -package edu.ucdenver.ccp.knowtator.io.knowtator; - -public class KnowtatorXMLTags { - - public static final String DOCUMENT = "document"; - public static final String ANNOTATION = "annotation"; - public static final String CLASS = "class"; - public static final String SPAN = "span"; - public static final String GRAPH_SPACE = "graph-space"; - public static final String VERTEX = "vertex"; - public static final String TRIPLE = "triple"; - public static final String PROFILE = "profile"; - public static final String HIGHLIGHTER = "highlighter"; - static final String KNOWTATOR_PROJECT = "knowtator-project"; -} +package edu.ucdenver.ccp.knowtator.io.knowtator; + +public class KnowtatorXMLTags { + + public static final String DOCUMENT = "document"; + public static final String ANNOTATION = "annotation"; + public static final String CLASS = "class"; + public static final String SPAN = "span"; + public static final String GRAPH_SPACE = "graph-space"; + public static final String VERTEX = "vertex"; + public static final String TRIPLE = "triple"; + public static final String PROFILE = "profile"; + public static final String HIGHLIGHTER = "highlighter"; + static final String KNOWTATOR_PROJECT = "knowtator-project"; +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/KnowtatorXMLUtil.java b/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/KnowtatorXMLUtil.java index 357d4931..ba660176 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/KnowtatorXMLUtil.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/KnowtatorXMLUtil.java @@ -1,120 +1,120 @@ -package edu.ucdenver.ccp.knowtator.io.knowtator; - -import edu.ucdenver.ccp.knowtator.io.BasicIOUtil; -import edu.ucdenver.ccp.knowtator.model.ProfileManager; -import edu.ucdenver.ccp.knowtator.model.Savable; -import edu.ucdenver.ccp.knowtator.model.TextSourceManager; -import org.apache.log4j.Logger; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.xml.sax.SAXException; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import java.io.*; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.List; - -public final class KnowtatorXMLUtil extends OldKnowatorUtil implements BasicIOUtil { - private static final Logger log = Logger.getLogger(KnowtatorXMLUtil.class); - - @Override - public void read(Savable savable, File file) throws IOException { - if (file.isDirectory()) { - Files.newDirectoryStream(Paths.get(file.toURI()), path -> path.toString().endsWith(".xml")) - .forEach(inputFile -> readFromInputFile(savable, inputFile.toFile())); - } else { - readFromInputFile(savable, file); - } - } - - private void readFromInputFile(Savable savable, File file) { - try { - log.warn("Reading from " + file); - - /* - doc parses the XML into a graph - */ - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder db = dbf.newDocumentBuilder(); - - InputStream is = new FileInputStream(file); - - Document doc; - try { - doc = db.parse(is); - doc.getDocumentElement().normalize(); - - List knowtatorNodes = - asList(doc.getElementsByTagName(KnowtatorXMLTags.KNOWTATOR_PROJECT)); - if (knowtatorNodes.size() > 0) { - Element knowtatorElement = (Element) knowtatorNodes.get(0); - savable.readFromKnowtatorXML(file, knowtatorElement); - } - - List annotationNodes = - asList(doc.getElementsByTagName(OldKnowtatorXMLTags.ANNOTATIONS)); - if (annotationNodes.size() > 0) { - savable.readFromOldKnowtatorXML(file, doc.getDocumentElement()); - } - } catch (IllegalArgumentException | IOException | SAXException e) { - e.printStackTrace(); - } - } catch (ParserConfigurationException | FileNotFoundException e) { - e.printStackTrace(); - } - } - - @Override - public void write(Savable savable, File file) { - if (savable instanceof TextSourceManager) { - ((TextSourceManager) savable) - .getTextSourceCollection() - .getCollection() - .forEach( - textSource -> { - File outputFile = - new File( - file.getAbsolutePath() - + File.separator - + textSource.getSaveFile().getName()); - writeToOutputFile(textSource, outputFile); - }); - } else if (savable instanceof ProfileManager) { - ((ProfileManager) savable) - .getProfileCollection() - .getCollection() - .forEach( - profile -> { - File outputFile = - new File(file.getAbsolutePath() + File.separator + profile.getId() + ".xml"); - writeToOutputFile(profile, outputFile); - }); - } else { - writeToOutputFile(savable, file); - } - } - - private void writeToOutputFile(Savable savable, File outputFile) { - Document dom; - - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - - try { - log.warn("Writing to " + outputFile.getAbsolutePath()); - DocumentBuilder db = dbf.newDocumentBuilder(); - dom = db.newDocument(); - - Element root = dom.createElement(KnowtatorXMLTags.KNOWTATOR_PROJECT); - dom.appendChild(root); - savable.writeToKnowtatorXML(dom, root); - - finishWritingXML(dom, outputFile); - } catch (ParserConfigurationException e1) { - e1.printStackTrace(); - } - } -} +package edu.ucdenver.ccp.knowtator.io.knowtator; + +import edu.ucdenver.ccp.knowtator.io.BasicIOUtil; +import edu.ucdenver.ccp.knowtator.model.ProfileManager; +import edu.ucdenver.ccp.knowtator.model.Savable; +import edu.ucdenver.ccp.knowtator.model.TextSourceManager; +import org.apache.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.xml.sax.SAXException; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; + +public final class KnowtatorXMLUtil extends OldKnowatorUtil implements BasicIOUtil { + private static final Logger log = Logger.getLogger(KnowtatorXMLUtil.class); + + @Override + public void read(Savable savable, File file) throws IOException { + if (file.isDirectory()) { + Files.newDirectoryStream(Paths.get(file.toURI()), path -> path.toString().endsWith(".xml")) + .forEach(inputFile -> readFromInputFile(savable, inputFile.toFile())); + } else { + readFromInputFile(savable, file); + } + } + + private void readFromInputFile(Savable savable, File file) { + try { + log.warn("Reading from " + file); + + /* + doc parses the XML into a graph + */ + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder db = dbf.newDocumentBuilder(); + + InputStream is = new FileInputStream(file); + + Document doc; + try { + doc = db.parse(is); + doc.getDocumentElement().normalize(); + + List knowtatorNodes = + asList(doc.getElementsByTagName(KnowtatorXMLTags.KNOWTATOR_PROJECT)); + if (knowtatorNodes.size() > 0) { + Element knowtatorElement = (Element) knowtatorNodes.get(0); + savable.readFromKnowtatorXML(file, knowtatorElement); + } + + List annotationNodes = + asList(doc.getElementsByTagName(OldKnowtatorXMLTags.ANNOTATIONS)); + if (annotationNodes.size() > 0) { + savable.readFromOldKnowtatorXML(file, doc.getDocumentElement()); + } + } catch (IllegalArgumentException | IOException | SAXException e) { + e.printStackTrace(); + } + } catch (ParserConfigurationException | FileNotFoundException e) { + e.printStackTrace(); + } + } + + @Override + public void write(Savable savable, File file) { + if (savable instanceof TextSourceManager) { + ((TextSourceManager) savable) + .getTextSourceCollection() + .getCollection() + .forEach( + textSource -> { + File outputFile = + new File( + file.getAbsolutePath() + + File.separator + + textSource.getSaveFile().getName()); + writeToOutputFile(textSource, outputFile); + }); + } else if (savable instanceof ProfileManager) { + ((ProfileManager) savable) + .getProfileCollection() + .getCollection() + .forEach( + profile -> { + File outputFile = + new File(file.getAbsolutePath() + File.separator + profile.getId() + ".xml"); + writeToOutputFile(profile, outputFile); + }); + } else { + writeToOutputFile(savable, file); + } + } + + private void writeToOutputFile(Savable savable, File outputFile) { + Document dom; + + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + + try { + log.warn("Writing to " + outputFile.getAbsolutePath()); + DocumentBuilder db = dbf.newDocumentBuilder(); + dom = db.newDocument(); + + Element root = dom.createElement(KnowtatorXMLTags.KNOWTATOR_PROJECT); + dom.appendChild(root); + savable.writeToKnowtatorXML(dom, root); + + finishWritingXML(dom, outputFile); + } catch (ParserConfigurationException e1) { + e1.printStackTrace(); + } + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/OldKnowatorUtil.java b/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/OldKnowatorUtil.java index e991ecd4..f9c73cfc 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/OldKnowatorUtil.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/OldKnowatorUtil.java @@ -1,50 +1,50 @@ -package edu.ucdenver.ccp.knowtator.io.knowtator; - -import edu.ucdenver.ccp.knowtator.io.XMLUtil; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -import java.util.HashMap; - -public class OldKnowatorUtil extends XMLUtil { - - public static HashMap getClassIDsFromXml(Element textSourceElement) { - /* - Next parse classes and add the annotations - */ - HashMap mentionTracker = new HashMap<>(); - - for (Node classNode : - KnowtatorXMLUtil.asList( - textSourceElement.getElementsByTagName(OldKnowtatorXMLTags.CLASS_MENTION))) { - if (classNode.getNodeType() == Node.ELEMENT_NODE) { - Element classElement = (Element) classNode; - - String annotationID = classElement.getAttribute(OldKnowtatorXMLAttributes.ID); - mentionTracker.put(annotationID, classElement); - } - } - - return mentionTracker; - } - - public static HashMap getslotsFromXml(Element textSourceElement) { - HashMap slotMap = new HashMap<>(); - String slotID; - Element slotElement; - for (Node complexSlotNode : - asList(textSourceElement.getElementsByTagName(OldKnowtatorXMLTags.COMPLEX_SLOT_MENTION))) { - slotElement = (Element) complexSlotNode; - slotID = slotElement.getAttribute(OldKnowtatorXMLAttributes.ID); - slotMap.put(slotID, slotElement); - } - // for (Node stringSlotNode : - // asList(textSourceElement.getElementsByTagName(OldKnowtatorXMLTags.STRING_SLOT_MENTION))) { - // slotElement = (Element) stringSlotNode; - // slotID = slotElement.getAttribute(OldKnowtatorXMLAttributes.ID); - // slotMap.put(slotID, slotElement); - // } - - return slotMap; - } -} +package edu.ucdenver.ccp.knowtator.io.knowtator; + +import edu.ucdenver.ccp.knowtator.io.XMLUtil; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import java.util.HashMap; + +public class OldKnowatorUtil extends XMLUtil { + + public static HashMap getClassIDsFromXml(Element textSourceElement) { + /* + Next parse classes and add the annotations + */ + HashMap mentionTracker = new HashMap<>(); + + for (Node classNode : + KnowtatorXMLUtil.asList( + textSourceElement.getElementsByTagName(OldKnowtatorXMLTags.CLASS_MENTION))) { + if (classNode.getNodeType() == Node.ELEMENT_NODE) { + Element classElement = (Element) classNode; + + String annotationID = classElement.getAttribute(OldKnowtatorXMLAttributes.ID); + mentionTracker.put(annotationID, classElement); + } + } + + return mentionTracker; + } + + public static HashMap getslotsFromXml(Element textSourceElement) { + HashMap slotMap = new HashMap<>(); + String slotID; + Element slotElement; + for (Node complexSlotNode : + asList(textSourceElement.getElementsByTagName(OldKnowtatorXMLTags.COMPLEX_SLOT_MENTION))) { + slotElement = (Element) complexSlotNode; + slotID = slotElement.getAttribute(OldKnowtatorXMLAttributes.ID); + slotMap.put(slotID, slotElement); + } + // for (Node stringSlotNode : + // asList(textSourceElement.getElementsByTagName(OldKnowtatorXMLTags.STRING_SLOT_MENTION))) { + // slotElement = (Element) stringSlotNode; + // slotID = slotElement.getAttribute(OldKnowtatorXMLAttributes.ID); + // slotMap.put(slotID, slotElement); + // } + + return slotMap; + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/OldKnowtatorXMLAttributes.java b/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/OldKnowtatorXMLAttributes.java index b45f4ce8..26167ac1 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/OldKnowtatorXMLAttributes.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/OldKnowtatorXMLAttributes.java @@ -1,22 +1,22 @@ -package edu.ucdenver.ccp.knowtator.io.knowtator; - -@SuppressWarnings("WeakerAccess") -public class OldKnowtatorXMLAttributes { - - public static final String ID = "id"; - public static final String SPAN_START = "start"; - public static final String SPAN_END = "end"; - public static final String TEXT_SOURCE = "textSource"; - - // Class assigned to named entity - - // Complex Slot Mentions - - public static final String VALUE = "value"; - // Coreference specific IDs - public static final String IDENTITY_CHAIN = "IDENTITY chain"; - public static final String COREFERENCE = "Coreferring strings"; - public static final String COMPLEX_SLOT_MENTION_ID_APPOS_HEAD = "APPOS Head"; - public static final String COMPLEX_SLOT_MENTION_ID_APPOS_ATTRIBUTES = "APPOS Attributes"; - public static final String ANNOTATOR = "annotator"; -} +package edu.ucdenver.ccp.knowtator.io.knowtator; + +@SuppressWarnings("WeakerAccess") +public class OldKnowtatorXMLAttributes { + + public static final String ID = "id"; + public static final String SPAN_START = "start"; + public static final String SPAN_END = "end"; + public static final String TEXT_SOURCE = "textSource"; + + // Class assigned to named entity + + // Complex Slot Mentions + + public static final String VALUE = "value"; + // Coreference specific IDs + public static final String IDENTITY_CHAIN = "IDENTITY chain"; + public static final String COREFERENCE = "Coreferring strings"; + public static final String COMPLEX_SLOT_MENTION_ID_APPOS_HEAD = "APPOS Head"; + public static final String COMPLEX_SLOT_MENTION_ID_APPOS_ATTRIBUTES = "APPOS Attributes"; + public static final String ANNOTATOR = "annotator"; +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/OldKnowtatorXMLTags.java b/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/OldKnowtatorXMLTags.java index 92b48751..5e869cc4 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/OldKnowtatorXMLTags.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/io/knowtator/OldKnowtatorXMLTags.java @@ -1,18 +1,18 @@ -package edu.ucdenver.ccp.knowtator.io.knowtator; - -public class OldKnowtatorXMLTags { - public static final String STRING_SLOT_MENTION = "stringSlotMention"; - public static final String ANNOTATION = "annotation"; - public static final String MENTION = "mention"; - public static final String ANNOTATOR = "annotator"; - public static final String MENTION_CLASS = "mentionClass"; // The named entity label - public static final String MENTION_SLOT = "mentionSlot"; - public static final String COMPLEX_SLOT_MENTION_VALUE = "complexSlotMentionValue"; - public static final String HAS_SLOT_MENTION = "hasSlotMention"; - // ******************OLD Tags***************** - static final String ANNOTATIONS = "annotations"; - public static final String SPAN = "span"; - static final String SPANNED_TEXT = "spannedText"; - static final String CLASS_MENTION = "classMention"; - static final String COMPLEX_SLOT_MENTION = "complexSlotMention"; -} +package edu.ucdenver.ccp.knowtator.io.knowtator; + +public class OldKnowtatorXMLTags { + public static final String STRING_SLOT_MENTION = "stringSlotMention"; + public static final String ANNOTATION = "annotation"; + public static final String MENTION = "mention"; + public static final String ANNOTATOR = "annotator"; + public static final String MENTION_CLASS = "mentionClass"; // The named entity label + public static final String MENTION_SLOT = "mentionSlot"; + public static final String COMPLEX_SLOT_MENTION_VALUE = "complexSlotMentionValue"; + public static final String HAS_SLOT_MENTION = "hasSlotMention"; + // ******************OLD Tags***************** + static final String ANNOTATIONS = "annotations"; + public static final String SPAN = "span"; + static final String SPANNED_TEXT = "spannedText"; + static final String CLASS_MENTION = "classMention"; + static final String COMPLEX_SLOT_MENTION = "complexSlotMention"; +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/AnnotationCollectionListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/AnnotationCollectionListener.java index 9b4427e1..8f6e44a8 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/AnnotationCollectionListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/AnnotationCollectionListener.java @@ -1,6 +1,6 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -import edu.ucdenver.ccp.knowtator.model.Annotation; - -public interface AnnotationCollectionListener extends CollectionListener { -} +package edu.ucdenver.ccp.knowtator.listeners; + +import edu.ucdenver.ccp.knowtator.model.Annotation; + +public interface AnnotationCollectionListener extends CollectionListener { +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/AnnotationSelectionListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/AnnotationSelectionListener.java index ec08ab96..9c8eae14 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/AnnotationSelectionListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/AnnotationSelectionListener.java @@ -1,7 +1,7 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -import edu.ucdenver.ccp.knowtator.events.AnnotationChangeEvent; - -public interface AnnotationSelectionListener { - void selectedAnnotationChanged(AnnotationChangeEvent e); -} +package edu.ucdenver.ccp.knowtator.listeners; + +import edu.ucdenver.ccp.knowtator.events.AnnotationChangeEvent; + +public interface AnnotationSelectionListener { + void selectedAnnotationChanged(AnnotationChangeEvent e); +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/CollectionListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/CollectionListener.java index ca002056..c29ef457 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/CollectionListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/CollectionListener.java @@ -1,9 +1,9 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -import edu.ucdenver.ccp.knowtator.model.KnowtatorObject; - -public interface CollectionListener { - void added(K addedObject); - - void removed(K removedObject); -} +package edu.ucdenver.ccp.knowtator.listeners; + +import edu.ucdenver.ccp.knowtator.model.KnowtatorObject; + +public interface CollectionListener { + void added(K addedObject); + + void removed(K removedObject); +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/ColorListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/ColorListener.java index e1359dff..4e111c5f 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/ColorListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/ColorListener.java @@ -1,5 +1,5 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -public interface ColorListener { - void colorChanged(); -} +package edu.ucdenver.ccp.knowtator.listeners; + +public interface ColorListener { + void colorChanged(); +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/DebugListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/DebugListener.java index 6e9aa611..488cf9ab 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/DebugListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/DebugListener.java @@ -1,5 +1,5 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -public interface DebugListener { - void setDebug(); -} +package edu.ucdenver.ccp.knowtator.listeners; + +public interface DebugListener { + void setDebug(); +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/GraphSpaceCollectionListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/GraphSpaceCollectionListener.java index 724b2ed3..a45aa2c5 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/GraphSpaceCollectionListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/GraphSpaceCollectionListener.java @@ -1,6 +1,6 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -import edu.ucdenver.ccp.knowtator.model.GraphSpace; - -public interface GraphSpaceCollectionListener extends CollectionListener { -} +package edu.ucdenver.ccp.knowtator.listeners; + +import edu.ucdenver.ccp.knowtator.model.GraphSpace; + +public interface GraphSpaceCollectionListener extends CollectionListener { +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/GraphSpaceListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/GraphSpaceListener.java index 9102376e..79022596 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/GraphSpaceListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/GraphSpaceListener.java @@ -1,7 +1,7 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -import edu.ucdenver.ccp.knowtator.model.TextSource; - -public interface GraphSpaceListener { - void graphTextChanged(TextSource textSource, int start, int end); -} +package edu.ucdenver.ccp.knowtator.listeners; + +import edu.ucdenver.ccp.knowtator.model.TextSource; + +public interface GraphSpaceListener { + void graphTextChanged(TextSource textSource, int start, int end); +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/GraphSpaceSelectionListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/GraphSpaceSelectionListener.java index f039d7f5..0d24bc22 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/GraphSpaceSelectionListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/GraphSpaceSelectionListener.java @@ -1,7 +1,7 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -import edu.ucdenver.ccp.knowtator.events.GraphSpaceChangeEvent; - -public interface GraphSpaceSelectionListener { - void activeGraphSpaceChanged(GraphSpaceChangeEvent e); -} +package edu.ucdenver.ccp.knowtator.listeners; + +import edu.ucdenver.ccp.knowtator.events.GraphSpaceChangeEvent; + +public interface GraphSpaceSelectionListener { + void activeGraphSpaceChanged(GraphSpaceChangeEvent e); +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/OWLClassSelectionListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/OWLClassSelectionListener.java index 521e15dd..ae4e699c 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/OWLClassSelectionListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/OWLClassSelectionListener.java @@ -1,7 +1,7 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -import org.semanticweb.owlapi.model.OWLClass; - -public interface OWLClassSelectionListener { - void owlClassChanged(OWLClass owlClass); -} +package edu.ucdenver.ccp.knowtator.listeners; + +import org.semanticweb.owlapi.model.OWLClass; + +public interface OWLClassSelectionListener { + void owlClassChanged(OWLClass owlClass); +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/OWLObjectPropertySelectionListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/OWLObjectPropertySelectionListener.java index 3fb26fd8..299b2f08 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/OWLObjectPropertySelectionListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/OWLObjectPropertySelectionListener.java @@ -1,7 +1,7 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -import org.semanticweb.owlapi.model.OWLObjectProperty; - -public interface OWLObjectPropertySelectionListener { - void owlObjectPropertyChanged(OWLObjectProperty value); -} +package edu.ucdenver.ccp.knowtator.listeners; + +import org.semanticweb.owlapi.model.OWLObjectProperty; + +public interface OWLObjectPropertySelectionListener { + void owlObjectPropertyChanged(OWLObjectProperty value); +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/OWLSetupListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/OWLSetupListener.java index 54349a91..60e5bd82 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/OWLSetupListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/OWLSetupListener.java @@ -1,5 +1,5 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -public interface OWLSetupListener { - void owlSetup(); -} +package edu.ucdenver.ccp.knowtator.listeners; + +public interface OWLSetupListener { + void owlSetup(); +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/ProfileCollectionListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/ProfileCollectionListener.java index 1a08c11a..f6e2e1b4 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/ProfileCollectionListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/ProfileCollectionListener.java @@ -1,6 +1,6 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -import edu.ucdenver.ccp.knowtator.model.Profile; - -public interface ProfileCollectionListener extends CollectionListener { -} +package edu.ucdenver.ccp.knowtator.listeners; + +import edu.ucdenver.ccp.knowtator.model.Profile; + +public interface ProfileCollectionListener extends CollectionListener { +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/ProfileSelectionListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/ProfileSelectionListener.java index c34357a6..88a4d73b 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/ProfileSelectionListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/ProfileSelectionListener.java @@ -1,7 +1,7 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -import edu.ucdenver.ccp.knowtator.events.ProfileChangeEvent; - -public interface ProfileSelectionListener { - void activeProfileChange(ProfileChangeEvent e); -} +package edu.ucdenver.ccp.knowtator.listeners; + +import edu.ucdenver.ccp.knowtator.events.ProfileChangeEvent; + +public interface ProfileSelectionListener { + void activeProfileChange(ProfileChangeEvent e); +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/SpanCollectionListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/SpanCollectionListener.java index af668195..b38e0887 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/SpanCollectionListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/SpanCollectionListener.java @@ -1,6 +1,6 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -import edu.ucdenver.ccp.knowtator.model.Span; - -public interface SpanCollectionListener extends CollectionListener { -} +package edu.ucdenver.ccp.knowtator.listeners; + +import edu.ucdenver.ccp.knowtator.model.Span; + +public interface SpanCollectionListener extends CollectionListener { +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/SpanSelectionListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/SpanSelectionListener.java index ce783740..acb58125 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/SpanSelectionListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/SpanSelectionListener.java @@ -1,8 +1,8 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -import edu.ucdenver.ccp.knowtator.events.SpanChangeEvent; - -public interface SpanSelectionListener { - - void selectedSpanChanged(SpanChangeEvent e); -} +package edu.ucdenver.ccp.knowtator.listeners; + +import edu.ucdenver.ccp.knowtator.events.SpanChangeEvent; + +public interface SpanSelectionListener { + + void selectedSpanChanged(SpanChangeEvent e); +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/TextSourceCollectionListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/TextSourceCollectionListener.java index 6b6f785d..5699c4a7 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/TextSourceCollectionListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/TextSourceCollectionListener.java @@ -1,6 +1,6 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -import edu.ucdenver.ccp.knowtator.model.TextSource; - -public interface TextSourceCollectionListener extends CollectionListener { -} +package edu.ucdenver.ccp.knowtator.listeners; + +import edu.ucdenver.ccp.knowtator.model.TextSource; + +public interface TextSourceCollectionListener extends CollectionListener { +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/TextSourceSelectionListener.java b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/TextSourceSelectionListener.java index 3e7fd98d..a2045acb 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/listeners/TextSourceSelectionListener.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/listeners/TextSourceSelectionListener.java @@ -1,7 +1,7 @@ -package edu.ucdenver.ccp.knowtator.listeners; - -import edu.ucdenver.ccp.knowtator.events.TextSourceChangeEvent; - -public interface TextSourceSelectionListener { - void activeTextSourceChanged(TextSourceChangeEvent e); -} +package edu.ucdenver.ccp.knowtator.listeners; + +import edu.ucdenver.ccp.knowtator.events.TextSourceChangeEvent; + +public interface TextSourceSelectionListener { + void activeTextSourceChanged(TextSourceChangeEvent e); +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/Annotation.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/Annotation.java index 80e33330..5c1f3111 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/Annotation.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/Annotation.java @@ -1,824 +1,824 @@ -package edu.ucdenver.ccp.knowtator.model; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.io.brat.StandoffTags; -import edu.ucdenver.ccp.knowtator.io.knowtator.*; -import edu.ucdenver.ccp.knowtator.listeners.OWLSetupListener; -import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; -import edu.ucdenver.ccp.knowtator.model.collection.SpanCollection; -import edu.ucdenver.ccp.knowtator.model.owl.OWLClassNotFoundException; -import edu.ucdenver.ccp.knowtator.model.owl.OWLEntityNullException; -import edu.ucdenver.ccp.knowtator.model.owl.OWLWorkSpaceNotSetException; -import org.apache.log4j.Logger; -import org.semanticweb.owlapi.model.*; -import org.semanticweb.owlapi.util.OWLEntityCollector; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -import javax.annotation.Nonnull; -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.*; - -public class Annotation implements Savable, KnowtatorObject, OWLSetupListener, OWLOntologyChangeListener, ProjectListener { - - private final Date date; - - @SuppressWarnings("unused") - private Logger log = Logger.getLogger(Annotation.class); - - private OWLClass owlClass; - private String annotation_type; - private SpanCollection spanCollection; - private Set overlappingAnnotations; - private String id; - private TextSource textSource; - private Profile annotator; - - private String bratID; - - private String owlClassID; - private KnowtatorController controller; - - public Annotation( - KnowtatorController controller, - String annotationID, - OWLClass owlClass, - String owlClassID, - Profile annotator, - String annotation_type, - TextSource textSource) { - this.textSource = textSource; - this.annotator = annotator; - this.controller = controller; - this.date = new Date(); - this.owlClass = owlClass; - this.owlClassID = owlClassID; - this.annotation_type = annotation_type; - - controller.verifyId(annotationID, this, false); - controller.getOWLAPIDataExtractor().addOWLSetupListener(this); - controller.getProjectManager().addListener(this); - - spanCollection = new SpanCollection(controller); - overlappingAnnotations = new HashSet<>(); - } - - public TextSource getTextSource() { - return textSource; - } - - public String getOwlClassID() { - return owlClassID; - } - - public Profile getAnnotator() { - return annotator; - } - - public Date getDate() { - return date; - } - - @Override - public String getId() { - return id; - } - - @Override - public void setId(String id) { - this.id = id; - } - - public OWLClass getOwlClass() { - return owlClass; - } - - private void setOwlClass(OWLClass owlClass) { - this.owlClass = owlClass; - } - - public SpanCollection getSpanCollection() { - return spanCollection; - } - - /** - * @return the size of the Span associated with the annotation. If the annotation has more than - * one Span, then the sum of the size of the spanCollection is returned. - */ - public int getSize() { - int size = 0; - for (Span span : this.spanCollection) { - size += span.getSize(); - } - return size; - } - - /** - * this needs to be moved out of this class - * - * @return an html representation of the annotation - */ - public String toHTML() { - StringBuilder sb = new StringBuilder(); - sb.append("

    • ").append(annotator.getId()).append("
    • "); - - sb.append("
    • class = ").append(getOwlClass()).append("
    • "); - sb.append("
    • spanCollection = "); - for (Span span : spanCollection) sb.append(span.toString()).append(" "); - sb.append("
    • "); - - sb.append("
    "); - return sb.toString(); - } - - @Override - public String toString() { - return String.format( - "Annotation: %s owl class: %s annotation_type: %s", id, getOwlClass(), annotation_type); - } - - public String getSpannedText() { - StringBuilder sb = new StringBuilder(); - spanCollection - .forEach( - span -> { - sb.append(String.format("%s", span.getSpannedText())); - sb.append("\n"); - }); - return sb.toString(); - } - - void addSpan(Span newSpan) { - spanCollection.add(newSpan); - newSpan.setAnnotation(this); - } - - void removeSpan(Span span) { - spanCollection.remove(span); - } - - public boolean contains(Integer loc) { - for (Span span : spanCollection) { - if (span.contains(loc)) { - return true; - } - } - return false; - } - - void addOverlappingAnnotation(Annotation annotation) { - overlappingAnnotations.add(annotation); - } - - @SuppressWarnings("unused") - public Set getOverlappingAnnotations() { - return overlappingAnnotations; - } - - public void writeToKnowtatorXML(Document dom, Element textSourceElement) { - Element annotationElem = dom.createElement(KnowtatorXMLTags.ANNOTATION); - annotationElem.setAttribute(KnowtatorXMLAttributes.ID, id); - annotationElem.setAttribute(KnowtatorXMLAttributes.ANNOTATOR, annotator.getId()); - annotationElem.setAttribute(KnowtatorXMLAttributes.TYPE, annotation_type); - - Element classElement = dom.createElement(KnowtatorXMLTags.CLASS); - - try { - classElement.setAttribute(KnowtatorXMLAttributes.ID, controller.getOWLAPIDataExtractor().getOWLEntityRendering(owlClass)); - } catch (OWLWorkSpaceNotSetException | OWLEntityNullException e) { - classElement.setAttribute(KnowtatorXMLAttributes.ID, getOwlClassID()); - } - - annotationElem.appendChild(classElement); - - spanCollection.forEach(span -> span.writeToKnowtatorXML(dom, annotationElem)); - - textSourceElement.appendChild(annotationElem); - } - - @Override - public void readFromKnowtatorXML(File file, Element parent) { - Element spanElement; - String spanId; - int spanStart; - int spanEnd; - for (Node spanNode : - KnowtatorXMLUtil.asList(parent.getElementsByTagName(KnowtatorXMLTags.SPAN))) { - if (spanNode.getNodeType() == Node.ELEMENT_NODE) { - spanElement = (Element) spanNode; - spanStart = Integer.parseInt(spanElement.getAttribute(KnowtatorXMLAttributes.SPAN_START)); - spanEnd = Integer.parseInt(spanElement.getAttribute(KnowtatorXMLAttributes.SPAN_END)); - spanId = spanElement.getAttribute(KnowtatorXMLAttributes.ID); - - Span newSpan = new Span(spanId, spanStart, spanEnd, textSource, controller); - addSpan(newSpan); - } - } - } - - @Override - public void readFromOldKnowtatorXML(File file, Element parent) { - for (Node spanNode : - KnowtatorXMLUtil.asList(parent.getElementsByTagName(OldKnowtatorXMLTags.SPAN))) { - if (spanNode.getNodeType() == Node.ELEMENT_NODE) { - Element spanElement = (Element) spanNode; - int spanStart = - Integer.parseInt(spanElement.getAttribute(OldKnowtatorXMLAttributes.SPAN_START)); - int spanEnd = - Integer.parseInt(spanElement.getAttribute(OldKnowtatorXMLAttributes.SPAN_END)); - - addSpan(new Span(null, spanStart, spanEnd, textSource, controller)); - } - } - - } - - @Override - public void readFromBratStandoff( - File file, Map> annotationMap, String content) { - String[] triple = - annotationMap - .get(StandoffTags.TEXTBOUNDANNOTATION) - .get(0)[1] - .split(StandoffTags.textBoundAnnotationTripleDelimiter); - int start = Integer.parseInt(triple[1]); - for (int i = 2; i < triple.length; i++) { - int end = Integer.parseInt(triple[i].split(StandoffTags.spanDelimiter)[0]); - - Span newSpan = new Span(null, start, end, textSource, controller); - addSpan(newSpan); - - if (i != triple.length - 1) { - start = Integer.parseInt(triple[i].split(StandoffTags.spanDelimiter)[1]); - } - } - } - - @Override - public void writeToBratStandoff(Writer writer) throws IOException { - Iterator spanIterator = spanCollection.iterator(); - for (int i = 0; i < spanCollection.size(); i++) { - spanIterator.next().writeToBratStandoff(writer); - if (i != spanCollection.size() - 1) { - writer.append(";"); - } - } - } - - @Override - public void readFromGeniaXML(Element parent, String content) {} - - @Override - public void writeToGeniaXML(Document dom, Element parent) {} - - public String getType() { - return annotation_type; - } - - String getBratID() { - return bratID; - } - - void setBratID(String bratID) { - this.bratID = bratID; - } - - public static int compare(Annotation annotation1, Annotation annotation2) { - Iterator spanIterator1 = annotation1.getSpanCollection().iterator(); - Iterator spanIterator2 = annotation2.getSpanCollection().iterator(); - int result = 0; - while(result == 0 && spanIterator1.hasNext() && spanIterator2.hasNext()) { - result = spanIterator1.next().compare(spanIterator2.next()); - } - if (result == 0) { - result = annotation1.getId().compareTo(annotation2.getId()); - } - return result; - } - - @Override - public void owlSetup() { - try { - setOwlClass(controller.getOWLAPIDataExtractor().getOWLClassByID(owlClassID)); - controller.getOWLAPIDataExtractor().getWorkSpace().getOWLModelManager().addOntologyChangeListener(this); - } catch (OWLWorkSpaceNotSetException | OWLClassNotFoundException ignored) { - - } - } - - @Override - public void ontologiesChanged(@Nonnull List changes) { - Set possiblyAddedEntities = new HashSet<>(); - Set possiblyRemovedEntities = new HashSet<>(); - OWLEntityCollector addedCollector = new OWLEntityCollector(possiblyAddedEntities); - OWLEntityCollector removedCollector = new OWLEntityCollector(possiblyRemovedEntities); - - for (OWLOntologyChange chg : changes) { - if (chg.isAxiomChange()) { - OWLAxiomChange axChg = (OWLAxiomChange) chg; - if (axChg.getAxiom().getAxiomType() == AxiomType.DECLARATION) { - if (axChg instanceof AddAxiom) { - axChg.getAxiom().accept(addedCollector); - } else { - axChg.getAxiom().accept(removedCollector); - } - } - } - } - - /* - For now, I will assume that entity removed is the one that existed and the one - that is added is the new name for it. - */ - if (!possiblyAddedEntities.isEmpty() && !possiblyRemovedEntities.isEmpty()) { - OWLEntity oldOWLClass = possiblyRemovedEntities.iterator().next(); - OWLEntity newOWLClass = possiblyAddedEntities.iterator().next(); - if (oldOWLClass == owlClass) { - setOwlClass((OWLClass) newOWLClass); - } - } - } - - @Override - public void projectClosed() { - - } - - @Override - public void projectLoaded() { - owlSetup(); - } - - // public Set getSimpleFeatureNames() { - // return Collections.unmodifiableSet(simpleFeatures.keySet()); - // } - // - // public Set getSimpleFeatureValues(String featureName) { - // if (simpleFeatures.get(featureName) == null) - // return Collections.emptySet(); - // return Collections.unmodifiableSet(simpleFeatures.get(featureName)); - // } - // - // @SuppressWarnings("unused") - // public boolean isSimpleFeature(String featureName) { - // return simpleFeatures.containsKey(featureName); - // } - // - // @SuppressWarnings("unused") - // public void setSimpleFeature(String featureName, Set featureValues) { - // if (featureValues == null) - // return; - // complexFeatures.remove(featureName); - // simpleFeatures.put(featureName, new HashSet<>(featureValues)); - // } - // - // @SuppressWarnings("unused") - // public void setSimpleFeature(String featureName, Object featureValue) { - // if (featureValue == null) - // return; - // complexFeatures.remove(featureName); - // HashSet featureValues = new HashSet<>(); - // featureValues.add(featureValue); - // simpleFeatures.put(featureName, featureValues); - // } - // - // public Set getComplexFeatureNames() { - // return Collections.unmodifiableSet(complexFeatures.keySet()); - // } - // - // public Set getComplexFeatureValues(String featureName) { - // if (complexFeatures.get(featureName) == null) - // return Collections.emptySet(); - // return Collections.unmodifiableSet(complexFeatures.get(featureName)); - // } - // - // @SuppressWarnings("unused") - // public boolean isComplexFeature(String featureName) { - // return complexFeatures.containsKey(featureName); - // } - // - // @SuppressWarnings("unused") - // public void setComplexFeature(String featureName, Set featureValues) { - // simpleFeatures.remove(featureName); - // complexFeatures.put(featureName, new HashSet<>(featureValues)); - // } - // - // @SuppressWarnings("unused") - // public void setComplexFeature(String featureName, annotation featureValue) { - // simpleFeatures.remove(featureName); - // HashSet featureValues = new HashSet<>(); - // featureValues.add(featureValue); - // complexFeatures.put(featureName, featureValues); - // } - // - // public Set getFeatureNames() { - // Set featureNames = new HashSet<>(simpleFeatures.keySet()); - // featureNames.addAll(complexFeatures.keySet()); - // return Collections.unmodifiableSet(featureNames); - // } - // /** - // * This method checks to see if two annotations have the same simple - // * features but does not compare the values of the features. - // * - // * @param annotation1 - // * @param annotation2 - // * @return true if both annotations have the same number of simple features - // * and they have the same names. - // */ - // @SuppressWarnings({"JavaDoc", "unused"}) - // public static boolean compareSimpleFeatureNames(annotation annotation1, annotation annotation2) - // { - // return compareNames(annotation1.getSimpleFeatureNames(), annotation2.getSimpleFeatureNames()); - // } - - // /** - // * This method checks to see if two annotations have the same complex - // * features but does not compare the values of the features. - // * - // * @param annotation1 - // * @param annotation2 - // * @return true if both annotations have the same number of complex features - // * and they have the same names. - // */ - // @SuppressWarnings({"JavaDoc", "unused"}) - // public static boolean compareComplexFeatureNames(annotation annotation1, annotation - // annotation2) { - // return compareNames(annotation1.getComplexFeatureNames(), - // annotation2.getComplexFeatureNames()); - // } - // - // @SuppressWarnings("unused") - // public static boolean compareFeatureNames(annotation annotation1, annotation annotation2) { - // return compareNames(annotation1.getFeatureNames(), annotation2.getFeatureNames()); - // } - // public String getProperty(String propertyTag) { - // return properties.get(propertyTag); - // } - // /** - // * This method compares two annotations with respect to their spanCollection, - // * annotation classes and simple features. - // * - // * @param annotation1 - // * @param annotation2 - // * @param spanComparison - // * must be one of SPANS_OVERLAP_COMPARISON, - // * SPANS_EXACT_COMPARISON, or IGNORE_SPANS_COMPARISON. If - // * IGNORE_SPANS_COMPARISON is passed in, then the spanCollection will be - // * considered as matching. - // * @param compareClass - // * if true, then the classes will be compared and will be - // * considered matched if they are the same. If false, then the - // * classes will not be compared and will be considered as - // * matching. - // * @param simpleFeatureNames - // * the simple features that will be compared. - // * @return MatchResult.TRIVIAL_NONMATCH if the spanCollection do not match. - // * MatchResult.TRIVIAL_NONMATCH if the classes do not match. - // * MatchResult.TRIVIAL_MATCH if spanCollection and classes match and - // * simpleFeatureNames is empty or null. If spanCollection and classes match, - // * then the result of compareSimpleFeatures(annotation, annotation, - // * Set) is returned. - // */ - // - // @SuppressWarnings("JavaDoc") - // public static int compareAnnotations(annotation annotation1, annotation annotation2, int - // spanComparison, - // boolean compareClass, Set simpleFeatureNames) { - // boolean spansMatch = false; - // boolean classesMatch = false; - // - // if (spanComparison == SPANS_OVERLAP_COMPARISON && spansOverlap(annotation1, annotation2)) - // spansMatch = true; - // else if (spanComparison == SPANS_EXACT_COMPARISON && spansMatch(annotation1, annotation2)) - // spansMatch = true; - // else if (spanComparison == IGNORE_SPANS_COMPARISON) - // spansMatch = true; - // - // if (spanComparison != SPANS_OVERLAP_COMPARISON && spanComparison != SPANS_EXACT_COMPARISON - // && spanComparison != IGNORE_SPANS_COMPARISON) - // throw new IllegalArgumentException( - // "The value for the parameter compareSpans is illegal. Please use one of - // SPANS_OVERLAP_COMPARISON, SPANS_EXACT_COMPARISON, or IGNORE_SPANS_COMPARISON."); - // - // if (!spansMatch) - // return MatchResult.TRIVIAL_NONMATCH; - // - // if (compareClass && classesMatch(annotation1, annotation2)) - // classesMatch = true; - // else if (!compareClass) - // classesMatch = true; - // - // if (!classesMatch) - // return MatchResult.TRIVIAL_NONMATCH; - // - // return compareSimpleFeatures(annotation1, annotation2, simpleFeatureNames); - // - // } - // /** - // * - // * @param annotation1 - // * @param annotation2 - // * @param featureName - // * the docID of the feature that will be compared between the two - // * annotations - // * @return MatchResult.TRIVIAL_NONMATCH if the featureName does not - // * correspond to a simple feature in either or both of the - // * annotations
    - // * the result of trivialCompare for the feature values unless that - // * method returns MatchResult.MATCH_RESULT_UNASSIGNED. Otherwise,
    - // * MatchResult.NONTRIVIAL_MATCH if the values of the features are - // * equal as defined by the equalStartAndEnd method.
    - // * MatchResult.NONTRIVIAL_NONMATCH if the values are not equal as - // * defined by the equalStartAndEnd method. - // * @see #trivialCompare(Set, Set) - // */ - // - // @SuppressWarnings("JavaDoc") - // public static int compareSimpleFeature(annotation annotation1, annotation annotation2, String - // featureName) { - // // if(!annotation1.isSimpleFeature(featureName) || - // // !annotation2.isSimpleFeature(featureName)) return - // // MatchResult.TRIVIAL_NONMATCH; - // - // int trivialResult = trivialCompare(annotation1.getSimpleFeatureValues(featureName), - // annotation2 - // .getSimpleFeatureValues(featureName)); - // if (trivialResult != MatchResult.MATCH_RESULT_UNASSIGNED) - // return trivialResult; - // - // Set featureValues1 = annotation1.getSimpleFeatureValues(featureName); - // Set featureValues2 = new HashSet<>(annotation2.getSimpleFeatureValues(featureName)); - // - // for (Object featureValue : featureValues1) { - // if (!featureValues2.contains(featureValue)) { - // return MatchResult.NONTRIVIAL_NONMATCH; - // } - // featureValues2.remove(featureValue); - // } - // - // return MatchResult.NONTRIVIAL_MATCH; - // - // } - - // /** - // * Compares all of the simple features of two annotations - // * - // * @param annotation1 - // * @param annotation2 - // * @return
      - // * - // *
    • TRIVIAL_NONMATCH if any of the simple features are trivial - // * non-matches. - // *
    • NONTRIVIAL_NONMATCH there is a non-matching simple feature - // * and all non-matching simple features are non-trivial. - // *
    • TRIVIAL_MATCH all simple features match and there is one - // * simple feature that is a trivial match. - // *
    • TRIVIAL_MATCH if there are no simple features. - // *
    • NONTRIVIAL_MATH all simple features match and are non-trivial - // *
    - // */ - // @SuppressWarnings("JavaDoc") - // public static int compareSimpleFeatures(annotation annotation1, annotation annotation2) { - // Set featureNames = new HashSet<>(annotation1.getSimpleFeatureNames()); - // featureNames.addAll(annotation2.getSimpleFeatureNames()); - // - // if (featureNames.size() == 0) - // return MatchResult.TRIVIAL_MATCH; - // - // return compareSimpleFeatures(annotation1, annotation2, featureNames); - // } - - // /** - // * Compares the simple features of two annotations named in featureNames - // * - // * @param annotation1 - // * @param annotation2 - // * @param featureNames - // * the simple features to compare. - // * @return
      - // *
    • TRIVIAL_NONMATCH if any of the features are trivial - // * non-matches - // *
    • NONTRIVIAL_NONMATCH if each of the simple features that are - // * non-matching are also non-trivial. For example, if there are five - // * simple features being compared and 2 are trivial matches, 1 is a - // * non-trivial match, and the other 2 are non-trivial non-matches, - // * then NONTRIVIAL_NONMATCH will be returned. - // *
    • TRIVIAL_MATCH if all of the features match and at least one - // * of them is a trivial match - // *
    • TRIVIAL_MATCH if featureNames is an empty set or null. - // *
    • NONTRIVIAL_MATH all simple features match and are non-trivial - // *
    - // */ - // @SuppressWarnings("JavaDoc") - // public static int compareSimpleFeatures(annotation annotation1, annotation annotation2, - // Set featureNames) { - // if (featureNames == null || featureNames.size() == 0) - // return MatchResult.TRIVIAL_MATCH; - // boolean trivialMatch = false; - // boolean nonmatch = false; - // - // for (String featureName : featureNames) { - // int result = compareSimpleFeature(annotation1, annotation2, featureName); - // if (result == MatchResult.TRIVIAL_NONMATCH) { - // return result; - // } else if (result == MatchResult.TRIVIAL_MATCH) { - // trivialMatch = true; - // } else if (result == MatchResult.NONTRIVIAL_NONMATCH) { - // nonmatch = true; - // } - // } - // if (nonmatch) - // return MatchResult.NONTRIVIAL_NONMATCH; - // if (trivialMatch) - // return MatchResult.TRIVIAL_MATCH; - // return MatchResult.NONTRIVIAL_MATCH; - // } - - // /** - // * This method compares the complex features of two annotations. A complex - // * feature has a docID and a value. The value is a set of Annotations - // * (typically one - but can be more). The parameters to this method - // * determine how the feature values should be compared. - // * - // * @param annotation1 - // * @param annotation2 - // * @param complexFeatureName - // * the docID of the feature that will be compared between the two - // * annotations - // * @param complexFeatureSpanComparison - // * specifies how the spanCollection of the feature values should be - // * compared. The value of this parameter must be one of - // * SPANS_OVERLAP_COMPARISON, SPANS_EXACT_COMPARISON, or - // * IGNORE_SPANS_COMPARISON. If IGNORE_SPANS_COMPARISON is passed - // * in, then the spanCollection will be considered as matching. - // * @param complexFeatureClassComparison - // * specifies how the classes of the feature values should be - // * compared. If true, then the classes will be compared and will - // * be considered matched if they are the same. If false, then the - // * classes will not be compared and will be considered as - // * matching. - // * @param simpleFeatureNamesOfComplexFeature - // * specifies which simple features of the feature values should - // * be compared. If null or an empty set is passed in, then the - // * next parameter should probably be set to 'false'. - // * @param trivialSimpleFeatureMatchesCauseTrivialMatch - // * this parameter determines how a TRIVIAL_MATCH between simple - // * features of the feature values should affect the return value - // * of this method. If true, then a trivial match between any of - // * the simple features of the feature values will cause - // * TRIVIAL_MATCH (if it not a non-match) to be returned. If - // * false, then a trivial match between any of the simple features - // * will not have an effect on whether the return value of this - // * method is TRIVIAL or NONTRIVIAL. - // * - // * @return MatchResult.TRIVIAL_NONMATCH if the featureName does not - // * correspond to a complex feature in either or both of the - // * annotations
    - // * the result of trivialCompare(Set, Set) for the feature values - // * unless that method returns MatchResult.MATCH_RESULT_UNASSIGNED. - // * Note that this is the only other criteria under which - // * TRIVIAL_NONMATCH is returned.
    - // * MatchResult.NONTRIVIAL_MATCH if the values of the complex feature - // * match as defined by the match parameters.
    - // * MatchResult.TRIVIAL_MATCH if the values of the complex feature - // * match trivially and the parameter - // * trivialSimpleFeatureMatchesCauseTrivialMatch is true.
    - // * MatchResult.NONTRIVIAL_NONMATCH if the values are not equal as - // * defined by the match parameters. - // * - // */ - // @SuppressWarnings("JavaDoc") - // public static int compareComplexFeature(annotation annotation1, annotation annotation2, String - // complexFeatureName, - // int complexFeatureSpanComparison, boolean complexFeatureClassComparison, - // Set simpleFeatureNamesOfComplexFeature, boolean - // trivialSimpleFeatureMatchesCauseTrivialMatch) { - // // if(!annotation1.isComplexFeature(complexFeatureName) || - // // !annotation2.isComplexFeature(complexFeatureName)) return - // // MatchResult.TRIVIAL_NONMATCH; - // - // Set featureValues1 = annotation1.getComplexFeatureValues(complexFeatureName); - // Set featureValues2 = new HashSet<>(annotation2 - // .getComplexFeatureValues(complexFeatureName)); - // - // int trivialResult = trivialCompare(featureValues1, featureValues2); - // - // if (trivialResult != MatchResult.MATCH_RESULT_UNASSIGNED) - // return trivialResult; - // - // boolean trivialSimpleFeatureMatch = false; - // for (annotation featureValue1 : featureValues1) { - // annotation matchedFeature = null; - // int matchedFeatureResult = MatchResult.MATCH_RESULT_UNASSIGNED; - // - // for (annotation featureValue2 : featureValues2) { - // int result = compareAnnotations(featureValue1, featureValue2, complexFeatureSpanComparison, - // complexFeatureClassComparison, simpleFeatureNamesOfComplexFeature); - // if (result == MatchResult.NONTRIVIAL_MATCH) { - // matchedFeature = featureValue2; - // matchedFeatureResult = result; - // break; - // } else if (result == MatchResult.TRIVIAL_MATCH) { - // matchedFeature = featureValue2; - // matchedFeatureResult = result; - // // do not break because we want to prefer NONTRIVIAL_MATCHes - // } - // } - // if (matchedFeature != null) { - // featureValues2.remove(matchedFeature); - // if (matchedFeatureResult == MatchResult.TRIVIAL_MATCH) - // trivialSimpleFeatureMatch = true; - // } else { - // return MatchResult.NONTRIVIAL_NONMATCH; - // } - // } - // - // if (trivialSimpleFeatureMatch && trivialSimpleFeatureMatchesCauseTrivialMatch) { - // return MatchResult.TRIVIAL_MATCH; - // } - // - // return MatchResult.NONTRIVIAL_MATCH; - // - // } - // /** - // * returns true only if both annotations have the same non-null - // * annotationClass. - // */ - // public static boolean classesMatch(annotation annotation1, annotation annotation2) { - // String cls1 = annotation1.getOWLEntityRendering(); - // String cls2 = annotation2.getOWLEntityRendering(); - // - // return cls1 != null && cls2 != null && cls1.equalStartAndEnd(cls2); - // - // } - // public static boolean compareNames(Set names1, Set names2) { - // if (names1.size() != names2.size()) - // return false; - // for (String docID : names1) { - // if (!names2.contains(docID)) - // return false; - // } - // return true; - // } - // /** - // * @return MatchResult.TRIVIAL_MATCH if both values are null, one is null - // * and the other empty, or if both are empty
    - // * MatchResult.TRIVIAL_NONMATCH if one of the values is empty and - // * they other is not, or if one values is null and the other is not - // * null and not empty
    - // * MatchResult.NONTRIVIAL_NONMATCH if the sizes of the values are - // * different.
    - // * MatchResult.MATCH_RESULT_UNASSIGNED is none of the above. - // * @param values1 - // * the value of a feature (simple or complex) - // * @param values2 - // * the value of another feature (simple or complex) - // * @return MatchResult.TRIVIAL_MATCH, MatchResult.TRIVIAL_NONMATCH, - // * MatchResult.NONTRIVIAL_NONMATCH, or MATCH_RESULT_UNASSIGNED - // * - // */ - // - // @SuppressWarnings("JavaDoc") - // public static int trivialCompare(Set values1, Set values2) { - // if (values1 == null && values2 == null) - // return MatchResult.TRIVIAL_MATCH; // if both are null than it is a - // // trivial match - // if (values1 == null && values2.size() == 0) - // return MatchResult.TRIVIAL_MATCH; // if one is null and the other - // // empty, then trivial match - // if (values2 == null && values1.size() == 0) - // return MatchResult.TRIVIAL_MATCH; - // if (values1 == null || values2 == null) - // return MatchResult.TRIVIAL_NONMATCH; // if one is null and the other - // // is not empty, then trivial - // // nonmatch - // if (values1.size() == 0 && values2.size() == 0) - // return MatchResult.TRIVIAL_MATCH; // if both are empty, then trivial - // // nonmatch - // if (values1.size() == 0 || values2.size() == 0) - // return MatchResult.TRIVIAL_NONMATCH; // if one is empty and the - // // other is not, then trivial - // // nonmatch - // if (values1.size() != values2.size()) - // return MatchResult.NONTRIVIAL_NONMATCH; // if neither are empty and - // // the sizes are different, - // // then non-trivial nonmatch - // return MatchResult.MATCH_RESULT_UNASSIGNED; - // } - // public static final int SPANS_OVERLAP_COMPARISON = 1; - // - // public static final int SPANS_EXACT_COMPARISON = 2; - // - // public static final int IGNORE_SPANS_COMPARISON = 3; - // public Span getSpanContainingLocation(int loc) { - // for (Span span : spanCollection) { - // if (loc >= span.getStart() && loc <= span.getEnd()) { - // return span; - // } - // } - // return null; - // } -} +package edu.ucdenver.ccp.knowtator.model; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.io.brat.StandoffTags; +import edu.ucdenver.ccp.knowtator.io.knowtator.*; +import edu.ucdenver.ccp.knowtator.listeners.OWLSetupListener; +import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; +import edu.ucdenver.ccp.knowtator.model.collection.SpanCollection; +import edu.ucdenver.ccp.knowtator.model.owl.OWLClassNotFoundException; +import edu.ucdenver.ccp.knowtator.model.owl.OWLEntityNullException; +import edu.ucdenver.ccp.knowtator.model.owl.OWLWorkSpaceNotSetException; +import org.apache.log4j.Logger; +import org.semanticweb.owlapi.model.*; +import org.semanticweb.owlapi.util.OWLEntityCollector; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import javax.annotation.Nonnull; +import java.io.File; +import java.io.IOException; +import java.io.Writer; +import java.util.*; + +public class Annotation implements Savable, KnowtatorObject, OWLSetupListener, OWLOntologyChangeListener, ProjectListener { + + private final Date date; + + @SuppressWarnings("unused") + private Logger log = Logger.getLogger(Annotation.class); + + private OWLClass owlClass; + private String annotation_type; + private SpanCollection spanCollection; + private Set overlappingAnnotations; + private String id; + private TextSource textSource; + private Profile annotator; + + private String bratID; + + private String owlClassID; + private KnowtatorController controller; + + public Annotation( + KnowtatorController controller, + String annotationID, + OWLClass owlClass, + String owlClassID, + Profile annotator, + String annotation_type, + TextSource textSource) { + this.textSource = textSource; + this.annotator = annotator; + this.controller = controller; + this.date = new Date(); + this.owlClass = owlClass; + this.owlClassID = owlClassID; + this.annotation_type = annotation_type; + + controller.verifyId(annotationID, this, false); + controller.getOWLAPIDataExtractor().addOWLSetupListener(this); + controller.getProjectManager().addListener(this); + + spanCollection = new SpanCollection(controller); + overlappingAnnotations = new HashSet<>(); + } + + public TextSource getTextSource() { + return textSource; + } + + public String getOwlClassID() { + return owlClassID; + } + + public Profile getAnnotator() { + return annotator; + } + + public Date getDate() { + return date; + } + + @Override + public String getId() { + return id; + } + + @Override + public void setId(String id) { + this.id = id; + } + + public OWLClass getOwlClass() { + return owlClass; + } + + private void setOwlClass(OWLClass owlClass) { + this.owlClass = owlClass; + } + + public SpanCollection getSpanCollection() { + return spanCollection; + } + + /** + * @return the size of the Span associated with the annotation. If the annotation has more than + * one Span, then the sum of the size of the spanCollection is returned. + */ + public int getSize() { + int size = 0; + for (Span span : this.spanCollection) { + size += span.getSize(); + } + return size; + } + + /** + * this needs to be moved out of this class + * + * @return an html representation of the annotation + */ + public String toHTML() { + StringBuilder sb = new StringBuilder(); + sb.append("
    • ").append(annotator.getId()).append("
    • "); + + sb.append("
    • class = ").append(getOwlClass()).append("
    • "); + sb.append("
    • spanCollection = "); + for (Span span : spanCollection) sb.append(span.toString()).append(" "); + sb.append("
    • "); + + sb.append("
    "); + return sb.toString(); + } + + @Override + public String toString() { + return String.format( + "Annotation: %s owl class: %s annotation_type: %s", id, getOwlClass(), annotation_type); + } + + public String getSpannedText() { + StringBuilder sb = new StringBuilder(); + spanCollection + .forEach( + span -> { + sb.append(String.format("%s", span.getSpannedText())); + sb.append("\n"); + }); + return sb.toString(); + } + + void addSpan(Span newSpan) { + spanCollection.add(newSpan); + newSpan.setAnnotation(this); + } + + void removeSpan(Span span) { + spanCollection.remove(span); + } + + public boolean contains(Integer loc) { + for (Span span : spanCollection) { + if (span.contains(loc)) { + return true; + } + } + return false; + } + + void addOverlappingAnnotation(Annotation annotation) { + overlappingAnnotations.add(annotation); + } + + @SuppressWarnings("unused") + public Set getOverlappingAnnotations() { + return overlappingAnnotations; + } + + public void writeToKnowtatorXML(Document dom, Element textSourceElement) { + Element annotationElem = dom.createElement(KnowtatorXMLTags.ANNOTATION); + annotationElem.setAttribute(KnowtatorXMLAttributes.ID, id); + annotationElem.setAttribute(KnowtatorXMLAttributes.ANNOTATOR, annotator.getId()); + annotationElem.setAttribute(KnowtatorXMLAttributes.TYPE, annotation_type); + + Element classElement = dom.createElement(KnowtatorXMLTags.CLASS); + + try { + classElement.setAttribute(KnowtatorXMLAttributes.ID, controller.getOWLAPIDataExtractor().getOWLEntityRendering(owlClass)); + } catch (OWLWorkSpaceNotSetException | OWLEntityNullException e) { + classElement.setAttribute(KnowtatorXMLAttributes.ID, getOwlClassID()); + } + + annotationElem.appendChild(classElement); + + spanCollection.forEach(span -> span.writeToKnowtatorXML(dom, annotationElem)); + + textSourceElement.appendChild(annotationElem); + } + + @Override + public void readFromKnowtatorXML(File file, Element parent) { + Element spanElement; + String spanId; + int spanStart; + int spanEnd; + for (Node spanNode : + KnowtatorXMLUtil.asList(parent.getElementsByTagName(KnowtatorXMLTags.SPAN))) { + if (spanNode.getNodeType() == Node.ELEMENT_NODE) { + spanElement = (Element) spanNode; + spanStart = Integer.parseInt(spanElement.getAttribute(KnowtatorXMLAttributes.SPAN_START)); + spanEnd = Integer.parseInt(spanElement.getAttribute(KnowtatorXMLAttributes.SPAN_END)); + spanId = spanElement.getAttribute(KnowtatorXMLAttributes.ID); + + Span newSpan = new Span(spanId, spanStart, spanEnd, textSource, controller); + addSpan(newSpan); + } + } + } + + @Override + public void readFromOldKnowtatorXML(File file, Element parent) { + for (Node spanNode : + KnowtatorXMLUtil.asList(parent.getElementsByTagName(OldKnowtatorXMLTags.SPAN))) { + if (spanNode.getNodeType() == Node.ELEMENT_NODE) { + Element spanElement = (Element) spanNode; + int spanStart = + Integer.parseInt(spanElement.getAttribute(OldKnowtatorXMLAttributes.SPAN_START)); + int spanEnd = + Integer.parseInt(spanElement.getAttribute(OldKnowtatorXMLAttributes.SPAN_END)); + + addSpan(new Span(null, spanStart, spanEnd, textSource, controller)); + } + } + + } + + @Override + public void readFromBratStandoff( + File file, Map> annotationMap, String content) { + String[] triple = + annotationMap + .get(StandoffTags.TEXTBOUNDANNOTATION) + .get(0)[1] + .split(StandoffTags.textBoundAnnotationTripleDelimiter); + int start = Integer.parseInt(triple[1]); + for (int i = 2; i < triple.length; i++) { + int end = Integer.parseInt(triple[i].split(StandoffTags.spanDelimiter)[0]); + + Span newSpan = new Span(null, start, end, textSource, controller); + addSpan(newSpan); + + if (i != triple.length - 1) { + start = Integer.parseInt(triple[i].split(StandoffTags.spanDelimiter)[1]); + } + } + } + + @Override + public void writeToBratStandoff(Writer writer) throws IOException { + Iterator spanIterator = spanCollection.iterator(); + for (int i = 0; i < spanCollection.size(); i++) { + spanIterator.next().writeToBratStandoff(writer); + if (i != spanCollection.size() - 1) { + writer.append(";"); + } + } + } + + @Override + public void readFromGeniaXML(Element parent, String content) {} + + @Override + public void writeToGeniaXML(Document dom, Element parent) {} + + public String getType() { + return annotation_type; + } + + String getBratID() { + return bratID; + } + + void setBratID(String bratID) { + this.bratID = bratID; + } + + public static int compare(Annotation annotation1, Annotation annotation2) { + Iterator spanIterator1 = annotation1.getSpanCollection().iterator(); + Iterator spanIterator2 = annotation2.getSpanCollection().iterator(); + int result = 0; + while(result == 0 && spanIterator1.hasNext() && spanIterator2.hasNext()) { + result = spanIterator1.next().compare(spanIterator2.next()); + } + if (result == 0) { + result = annotation1.getId().compareTo(annotation2.getId()); + } + return result; + } + + @Override + public void owlSetup() { + try { + setOwlClass(controller.getOWLAPIDataExtractor().getOWLClassByID(owlClassID)); + controller.getOWLAPIDataExtractor().getWorkSpace().getOWLModelManager().addOntologyChangeListener(this); + } catch (OWLWorkSpaceNotSetException | OWLClassNotFoundException ignored) { + + } + } + + @Override + public void ontologiesChanged(@Nonnull List changes) { + Set possiblyAddedEntities = new HashSet<>(); + Set possiblyRemovedEntities = new HashSet<>(); + OWLEntityCollector addedCollector = new OWLEntityCollector(possiblyAddedEntities); + OWLEntityCollector removedCollector = new OWLEntityCollector(possiblyRemovedEntities); + + for (OWLOntologyChange chg : changes) { + if (chg.isAxiomChange()) { + OWLAxiomChange axChg = (OWLAxiomChange) chg; + if (axChg.getAxiom().getAxiomType() == AxiomType.DECLARATION) { + if (axChg instanceof AddAxiom) { + axChg.getAxiom().accept(addedCollector); + } else { + axChg.getAxiom().accept(removedCollector); + } + } + } + } + + /* + For now, I will assume that entity removed is the one that existed and the one + that is added is the new name for it. + */ + if (!possiblyAddedEntities.isEmpty() && !possiblyRemovedEntities.isEmpty()) { + OWLEntity oldOWLClass = possiblyRemovedEntities.iterator().next(); + OWLEntity newOWLClass = possiblyAddedEntities.iterator().next(); + if (oldOWLClass == owlClass) { + setOwlClass((OWLClass) newOWLClass); + } + } + } + + @Override + public void projectClosed() { + + } + + @Override + public void projectLoaded() { + owlSetup(); + } + + // public Set getSimpleFeatureNames() { + // return Collections.unmodifiableSet(simpleFeatures.keySet()); + // } + // + // public Set getSimpleFeatureValues(String featureName) { + // if (simpleFeatures.get(featureName) == null) + // return Collections.emptySet(); + // return Collections.unmodifiableSet(simpleFeatures.get(featureName)); + // } + // + // @SuppressWarnings("unused") + // public boolean isSimpleFeature(String featureName) { + // return simpleFeatures.containsKey(featureName); + // } + // + // @SuppressWarnings("unused") + // public void setSimpleFeature(String featureName, Set featureValues) { + // if (featureValues == null) + // return; + // complexFeatures.remove(featureName); + // simpleFeatures.put(featureName, new HashSet<>(featureValues)); + // } + // + // @SuppressWarnings("unused") + // public void setSimpleFeature(String featureName, Object featureValue) { + // if (featureValue == null) + // return; + // complexFeatures.remove(featureName); + // HashSet featureValues = new HashSet<>(); + // featureValues.add(featureValue); + // simpleFeatures.put(featureName, featureValues); + // } + // + // public Set getComplexFeatureNames() { + // return Collections.unmodifiableSet(complexFeatures.keySet()); + // } + // + // public Set getComplexFeatureValues(String featureName) { + // if (complexFeatures.get(featureName) == null) + // return Collections.emptySet(); + // return Collections.unmodifiableSet(complexFeatures.get(featureName)); + // } + // + // @SuppressWarnings("unused") + // public boolean isComplexFeature(String featureName) { + // return complexFeatures.containsKey(featureName); + // } + // + // @SuppressWarnings("unused") + // public void setComplexFeature(String featureName, Set featureValues) { + // simpleFeatures.remove(featureName); + // complexFeatures.put(featureName, new HashSet<>(featureValues)); + // } + // + // @SuppressWarnings("unused") + // public void setComplexFeature(String featureName, annotation featureValue) { + // simpleFeatures.remove(featureName); + // HashSet featureValues = new HashSet<>(); + // featureValues.add(featureValue); + // complexFeatures.put(featureName, featureValues); + // } + // + // public Set getFeatureNames() { + // Set featureNames = new HashSet<>(simpleFeatures.keySet()); + // featureNames.addAll(complexFeatures.keySet()); + // return Collections.unmodifiableSet(featureNames); + // } + // /** + // * This method checks to see if two annotations have the same simple + // * features but does not compare the values of the features. + // * + // * @param annotation1 + // * @param annotation2 + // * @return true if both annotations have the same number of simple features + // * and they have the same names. + // */ + // @SuppressWarnings({"JavaDoc", "unused"}) + // public static boolean compareSimpleFeatureNames(annotation annotation1, annotation annotation2) + // { + // return compareNames(annotation1.getSimpleFeatureNames(), annotation2.getSimpleFeatureNames()); + // } + + // /** + // * This method checks to see if two annotations have the same complex + // * features but does not compare the values of the features. + // * + // * @param annotation1 + // * @param annotation2 + // * @return true if both annotations have the same number of complex features + // * and they have the same names. + // */ + // @SuppressWarnings({"JavaDoc", "unused"}) + // public static boolean compareComplexFeatureNames(annotation annotation1, annotation + // annotation2) { + // return compareNames(annotation1.getComplexFeatureNames(), + // annotation2.getComplexFeatureNames()); + // } + // + // @SuppressWarnings("unused") + // public static boolean compareFeatureNames(annotation annotation1, annotation annotation2) { + // return compareNames(annotation1.getFeatureNames(), annotation2.getFeatureNames()); + // } + // public String getProperty(String propertyTag) { + // return properties.get(propertyTag); + // } + // /** + // * This method compares two annotations with respect to their spanCollection, + // * annotation classes and simple features. + // * + // * @param annotation1 + // * @param annotation2 + // * @param spanComparison + // * must be one of SPANS_OVERLAP_COMPARISON, + // * SPANS_EXACT_COMPARISON, or IGNORE_SPANS_COMPARISON. If + // * IGNORE_SPANS_COMPARISON is passed in, then the spanCollection will be + // * considered as matching. + // * @param compareClass + // * if true, then the classes will be compared and will be + // * considered matched if they are the same. If false, then the + // * classes will not be compared and will be considered as + // * matching. + // * @param simpleFeatureNames + // * the simple features that will be compared. + // * @return MatchResult.TRIVIAL_NONMATCH if the spanCollection do not match. + // * MatchResult.TRIVIAL_NONMATCH if the classes do not match. + // * MatchResult.TRIVIAL_MATCH if spanCollection and classes match and + // * simpleFeatureNames is empty or null. If spanCollection and classes match, + // * then the result of compareSimpleFeatures(annotation, annotation, + // * Set) is returned. + // */ + // + // @SuppressWarnings("JavaDoc") + // public static int compareAnnotations(annotation annotation1, annotation annotation2, int + // spanComparison, + // boolean compareClass, Set simpleFeatureNames) { + // boolean spansMatch = false; + // boolean classesMatch = false; + // + // if (spanComparison == SPANS_OVERLAP_COMPARISON && spansOverlap(annotation1, annotation2)) + // spansMatch = true; + // else if (spanComparison == SPANS_EXACT_COMPARISON && spansMatch(annotation1, annotation2)) + // spansMatch = true; + // else if (spanComparison == IGNORE_SPANS_COMPARISON) + // spansMatch = true; + // + // if (spanComparison != SPANS_OVERLAP_COMPARISON && spanComparison != SPANS_EXACT_COMPARISON + // && spanComparison != IGNORE_SPANS_COMPARISON) + // throw new IllegalArgumentException( + // "The value for the parameter compareSpans is illegal. Please use one of + // SPANS_OVERLAP_COMPARISON, SPANS_EXACT_COMPARISON, or IGNORE_SPANS_COMPARISON."); + // + // if (!spansMatch) + // return MatchResult.TRIVIAL_NONMATCH; + // + // if (compareClass && classesMatch(annotation1, annotation2)) + // classesMatch = true; + // else if (!compareClass) + // classesMatch = true; + // + // if (!classesMatch) + // return MatchResult.TRIVIAL_NONMATCH; + // + // return compareSimpleFeatures(annotation1, annotation2, simpleFeatureNames); + // + // } + // /** + // * + // * @param annotation1 + // * @param annotation2 + // * @param featureName + // * the docID of the feature that will be compared between the two + // * annotations + // * @return MatchResult.TRIVIAL_NONMATCH if the featureName does not + // * correspond to a simple feature in either or both of the + // * annotations
    + // * the result of trivialCompare for the feature values unless that + // * method returns MatchResult.MATCH_RESULT_UNASSIGNED. Otherwise,
    + // * MatchResult.NONTRIVIAL_MATCH if the values of the features are + // * equal as defined by the equalStartAndEnd method.
    + // * MatchResult.NONTRIVIAL_NONMATCH if the values are not equal as + // * defined by the equalStartAndEnd method. + // * @see #trivialCompare(Set, Set) + // */ + // + // @SuppressWarnings("JavaDoc") + // public static int compareSimpleFeature(annotation annotation1, annotation annotation2, String + // featureName) { + // // if(!annotation1.isSimpleFeature(featureName) || + // // !annotation2.isSimpleFeature(featureName)) return + // // MatchResult.TRIVIAL_NONMATCH; + // + // int trivialResult = trivialCompare(annotation1.getSimpleFeatureValues(featureName), + // annotation2 + // .getSimpleFeatureValues(featureName)); + // if (trivialResult != MatchResult.MATCH_RESULT_UNASSIGNED) + // return trivialResult; + // + // Set featureValues1 = annotation1.getSimpleFeatureValues(featureName); + // Set featureValues2 = new HashSet<>(annotation2.getSimpleFeatureValues(featureName)); + // + // for (Object featureValue : featureValues1) { + // if (!featureValues2.contains(featureValue)) { + // return MatchResult.NONTRIVIAL_NONMATCH; + // } + // featureValues2.remove(featureValue); + // } + // + // return MatchResult.NONTRIVIAL_MATCH; + // + // } + + // /** + // * Compares all of the simple features of two annotations + // * + // * @param annotation1 + // * @param annotation2 + // * @return
      + // * + // *
    • TRIVIAL_NONMATCH if any of the simple features are trivial + // * non-matches. + // *
    • NONTRIVIAL_NONMATCH there is a non-matching simple feature + // * and all non-matching simple features are non-trivial. + // *
    • TRIVIAL_MATCH all simple features match and there is one + // * simple feature that is a trivial match. + // *
    • TRIVIAL_MATCH if there are no simple features. + // *
    • NONTRIVIAL_MATH all simple features match and are non-trivial + // *
    + // */ + // @SuppressWarnings("JavaDoc") + // public static int compareSimpleFeatures(annotation annotation1, annotation annotation2) { + // Set featureNames = new HashSet<>(annotation1.getSimpleFeatureNames()); + // featureNames.addAll(annotation2.getSimpleFeatureNames()); + // + // if (featureNames.size() == 0) + // return MatchResult.TRIVIAL_MATCH; + // + // return compareSimpleFeatures(annotation1, annotation2, featureNames); + // } + + // /** + // * Compares the simple features of two annotations named in featureNames + // * + // * @param annotation1 + // * @param annotation2 + // * @param featureNames + // * the simple features to compare. + // * @return
      + // *
    • TRIVIAL_NONMATCH if any of the features are trivial + // * non-matches + // *
    • NONTRIVIAL_NONMATCH if each of the simple features that are + // * non-matching are also non-trivial. For example, if there are five + // * simple features being compared and 2 are trivial matches, 1 is a + // * non-trivial match, and the other 2 are non-trivial non-matches, + // * then NONTRIVIAL_NONMATCH will be returned. + // *
    • TRIVIAL_MATCH if all of the features match and at least one + // * of them is a trivial match + // *
    • TRIVIAL_MATCH if featureNames is an empty set or null. + // *
    • NONTRIVIAL_MATH all simple features match and are non-trivial + // *
    + // */ + // @SuppressWarnings("JavaDoc") + // public static int compareSimpleFeatures(annotation annotation1, annotation annotation2, + // Set featureNames) { + // if (featureNames == null || featureNames.size() == 0) + // return MatchResult.TRIVIAL_MATCH; + // boolean trivialMatch = false; + // boolean nonmatch = false; + // + // for (String featureName : featureNames) { + // int result = compareSimpleFeature(annotation1, annotation2, featureName); + // if (result == MatchResult.TRIVIAL_NONMATCH) { + // return result; + // } else if (result == MatchResult.TRIVIAL_MATCH) { + // trivialMatch = true; + // } else if (result == MatchResult.NONTRIVIAL_NONMATCH) { + // nonmatch = true; + // } + // } + // if (nonmatch) + // return MatchResult.NONTRIVIAL_NONMATCH; + // if (trivialMatch) + // return MatchResult.TRIVIAL_MATCH; + // return MatchResult.NONTRIVIAL_MATCH; + // } + + // /** + // * This method compares the complex features of two annotations. A complex + // * feature has a docID and a value. The value is a set of Annotations + // * (typically one - but can be more). The parameters to this method + // * determine how the feature values should be compared. + // * + // * @param annotation1 + // * @param annotation2 + // * @param complexFeatureName + // * the docID of the feature that will be compared between the two + // * annotations + // * @param complexFeatureSpanComparison + // * specifies how the spanCollection of the feature values should be + // * compared. The value of this parameter must be one of + // * SPANS_OVERLAP_COMPARISON, SPANS_EXACT_COMPARISON, or + // * IGNORE_SPANS_COMPARISON. If IGNORE_SPANS_COMPARISON is passed + // * in, then the spanCollection will be considered as matching. + // * @param complexFeatureClassComparison + // * specifies how the classes of the feature values should be + // * compared. If true, then the classes will be compared and will + // * be considered matched if they are the same. If false, then the + // * classes will not be compared and will be considered as + // * matching. + // * @param simpleFeatureNamesOfComplexFeature + // * specifies which simple features of the feature values should + // * be compared. If null or an empty set is passed in, then the + // * next parameter should probably be set to 'false'. + // * @param trivialSimpleFeatureMatchesCauseTrivialMatch + // * this parameter determines how a TRIVIAL_MATCH between simple + // * features of the feature values should affect the return value + // * of this method. If true, then a trivial match between any of + // * the simple features of the feature values will cause + // * TRIVIAL_MATCH (if it not a non-match) to be returned. If + // * false, then a trivial match between any of the simple features + // * will not have an effect on whether the return value of this + // * method is TRIVIAL or NONTRIVIAL. + // * + // * @return MatchResult.TRIVIAL_NONMATCH if the featureName does not + // * correspond to a complex feature in either or both of the + // * annotations
    + // * the result of trivialCompare(Set, Set) for the feature values + // * unless that method returns MatchResult.MATCH_RESULT_UNASSIGNED. + // * Note that this is the only other criteria under which + // * TRIVIAL_NONMATCH is returned.
    + // * MatchResult.NONTRIVIAL_MATCH if the values of the complex feature + // * match as defined by the match parameters.
    + // * MatchResult.TRIVIAL_MATCH if the values of the complex feature + // * match trivially and the parameter + // * trivialSimpleFeatureMatchesCauseTrivialMatch is true.
    + // * MatchResult.NONTRIVIAL_NONMATCH if the values are not equal as + // * defined by the match parameters. + // * + // */ + // @SuppressWarnings("JavaDoc") + // public static int compareComplexFeature(annotation annotation1, annotation annotation2, String + // complexFeatureName, + // int complexFeatureSpanComparison, boolean complexFeatureClassComparison, + // Set simpleFeatureNamesOfComplexFeature, boolean + // trivialSimpleFeatureMatchesCauseTrivialMatch) { + // // if(!annotation1.isComplexFeature(complexFeatureName) || + // // !annotation2.isComplexFeature(complexFeatureName)) return + // // MatchResult.TRIVIAL_NONMATCH; + // + // Set featureValues1 = annotation1.getComplexFeatureValues(complexFeatureName); + // Set featureValues2 = new HashSet<>(annotation2 + // .getComplexFeatureValues(complexFeatureName)); + // + // int trivialResult = trivialCompare(featureValues1, featureValues2); + // + // if (trivialResult != MatchResult.MATCH_RESULT_UNASSIGNED) + // return trivialResult; + // + // boolean trivialSimpleFeatureMatch = false; + // for (annotation featureValue1 : featureValues1) { + // annotation matchedFeature = null; + // int matchedFeatureResult = MatchResult.MATCH_RESULT_UNASSIGNED; + // + // for (annotation featureValue2 : featureValues2) { + // int result = compareAnnotations(featureValue1, featureValue2, complexFeatureSpanComparison, + // complexFeatureClassComparison, simpleFeatureNamesOfComplexFeature); + // if (result == MatchResult.NONTRIVIAL_MATCH) { + // matchedFeature = featureValue2; + // matchedFeatureResult = result; + // break; + // } else if (result == MatchResult.TRIVIAL_MATCH) { + // matchedFeature = featureValue2; + // matchedFeatureResult = result; + // // do not break because we want to prefer NONTRIVIAL_MATCHes + // } + // } + // if (matchedFeature != null) { + // featureValues2.remove(matchedFeature); + // if (matchedFeatureResult == MatchResult.TRIVIAL_MATCH) + // trivialSimpleFeatureMatch = true; + // } else { + // return MatchResult.NONTRIVIAL_NONMATCH; + // } + // } + // + // if (trivialSimpleFeatureMatch && trivialSimpleFeatureMatchesCauseTrivialMatch) { + // return MatchResult.TRIVIAL_MATCH; + // } + // + // return MatchResult.NONTRIVIAL_MATCH; + // + // } + // /** + // * returns true only if both annotations have the same non-null + // * annotationClass. + // */ + // public static boolean classesMatch(annotation annotation1, annotation annotation2) { + // String cls1 = annotation1.getOWLEntityRendering(); + // String cls2 = annotation2.getOWLEntityRendering(); + // + // return cls1 != null && cls2 != null && cls1.equalStartAndEnd(cls2); + // + // } + // public static boolean compareNames(Set names1, Set names2) { + // if (names1.size() != names2.size()) + // return false; + // for (String docID : names1) { + // if (!names2.contains(docID)) + // return false; + // } + // return true; + // } + // /** + // * @return MatchResult.TRIVIAL_MATCH if both values are null, one is null + // * and the other empty, or if both are empty
    + // * MatchResult.TRIVIAL_NONMATCH if one of the values is empty and + // * they other is not, or if one values is null and the other is not + // * null and not empty
    + // * MatchResult.NONTRIVIAL_NONMATCH if the sizes of the values are + // * different.
    + // * MatchResult.MATCH_RESULT_UNASSIGNED is none of the above. + // * @param values1 + // * the value of a feature (simple or complex) + // * @param values2 + // * the value of another feature (simple or complex) + // * @return MatchResult.TRIVIAL_MATCH, MatchResult.TRIVIAL_NONMATCH, + // * MatchResult.NONTRIVIAL_NONMATCH, or MATCH_RESULT_UNASSIGNED + // * + // */ + // + // @SuppressWarnings("JavaDoc") + // public static int trivialCompare(Set values1, Set values2) { + // if (values1 == null && values2 == null) + // return MatchResult.TRIVIAL_MATCH; // if both are null than it is a + // // trivial match + // if (values1 == null && values2.size() == 0) + // return MatchResult.TRIVIAL_MATCH; // if one is null and the other + // // empty, then trivial match + // if (values2 == null && values1.size() == 0) + // return MatchResult.TRIVIAL_MATCH; + // if (values1 == null || values2 == null) + // return MatchResult.TRIVIAL_NONMATCH; // if one is null and the other + // // is not empty, then trivial + // // nonmatch + // if (values1.size() == 0 && values2.size() == 0) + // return MatchResult.TRIVIAL_MATCH; // if both are empty, then trivial + // // nonmatch + // if (values1.size() == 0 || values2.size() == 0) + // return MatchResult.TRIVIAL_NONMATCH; // if one is empty and the + // // other is not, then trivial + // // nonmatch + // if (values1.size() != values2.size()) + // return MatchResult.NONTRIVIAL_NONMATCH; // if neither are empty and + // // the sizes are different, + // // then non-trivial nonmatch + // return MatchResult.MATCH_RESULT_UNASSIGNED; + // } + // public static final int SPANS_OVERLAP_COMPARISON = 1; + // + // public static final int SPANS_EXACT_COMPARISON = 2; + // + // public static final int IGNORE_SPANS_COMPARISON = 3; + // public Span getSpanContainingLocation(int loc) { + // for (Span span : spanCollection) { + // if (loc >= span.getStart() && loc <= span.getEnd()) { + // return span; + // } + // } + // return null; + // } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/AnnotationManager.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/AnnotationManager.java index 40b76b9c..9a83c96a 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/AnnotationManager.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/AnnotationManager.java @@ -1,427 +1,427 @@ -package edu.ucdenver.ccp.knowtator.model; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.io.brat.StandoffTags; -import edu.ucdenver.ccp.knowtator.io.knowtator.*; -import edu.ucdenver.ccp.knowtator.model.collection.AnnotationCollection; -import edu.ucdenver.ccp.knowtator.model.collection.GraphSpaceCollection; -import edu.ucdenver.ccp.knowtator.model.collection.SpanCollection; -import edu.ucdenver.ccp.knowtator.model.owl.OWLEntityNullException; -import edu.ucdenver.ccp.knowtator.model.owl.OWLWorkSpaceNotSetException; -import org.apache.log4j.Logger; -import org.semanticweb.owlapi.model.OWLClass; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.*; -import java.util.function.Supplier; -import java.util.stream.Collectors; - -public class AnnotationManager implements Savable { - - @SuppressWarnings("unused") - private static final Logger log = Logger.getLogger(AnnotationManager.class); - - private final KnowtatorController controller; - - private SpanCollection allSpanCollection; - private TextSource textSource; - private AnnotationCollection annotationCollection; - private GraphSpaceCollection graphSpaceCollection; - - AnnotationManager(KnowtatorController controller, TextSource textSource) { - this.controller = controller; - this.textSource = textSource; - annotationCollection = new AnnotationCollection(controller); - allSpanCollection = new SpanCollection(controller); - graphSpaceCollection = new GraphSpaceCollection(controller); - } - - public void addAnnotation(Annotation newAnnotation) { - annotationCollection.add(newAnnotation); - - allSpanCollection.getCollection().addAll(newAnnotation.getSpanCollection().getCollection()); - - controller.getSelectionManager().setSelectedAnnotation(newAnnotation, null); - } - - public void addSpanToAnnotation(Annotation annotation, Span newSpan) { - annotation.addSpan(newSpan); - allSpanCollection.add(newSpan); - controller.getSelectionManager().setSelectedSpan(newSpan); - } - - public void removeAnnotation(Annotation annotationToRemove) { - annotationCollection.remove(annotationToRemove); - for (Span span : annotationToRemove.getSpanCollection()) { - allSpanCollection.remove(span); - } - for (GraphSpace graphSpace : graphSpaceCollection) { - for (Object vertex : graphSpace.getVerticesForAnnotation(annotationToRemove)) { - graphSpace.setSelectionCell(vertex); - graphSpace.removeSelectedCell(); - } - } - controller.getSelectionManager().setSelectedAnnotation(null, null); - } - - public void removeSpanFromAnnotation(Annotation annotation, Span span) { - annotation.removeSpan(span); - allSpanCollection.remove(span); - } - - public AnnotationCollection getAnnotations() { - return annotationCollection; - } - - /** @param loc Location filter */ - public TreeSet getSpans(Integer loc, int start, int end) { - Supplier> supplier = () -> new TreeSet<>(Span::compare); - return allSpanCollection - .stream() - .filter( - span -> - (loc == null || span.contains(loc)) - && (start <= span.getStart() && span.getEnd() <= end) - && (!controller.getSelectionManager().isFilterByProfile() - || span.getAnnotation() - .getAnnotator() - .equals(controller.getSelectionManager().getActiveProfile()))) - .collect(Collectors.toCollection(supplier)); - } - - public void growSelectedSpanStart() { - Span span = controller.getSelectionManager().getSelectedSpan(); - allSpanCollection.remove(span); - span.growStart(); - allSpanCollection.add(span); - controller.getSelectionManager().setSelectedSpan(span); - } - - public void growSelectedSpanEnd() { - Span span = controller.getSelectionManager().getSelectedSpan(); - allSpanCollection.remove(span); - span.growEnd(textSource.getContent().length()); - allSpanCollection.add(controller.getSelectionManager().getSelectedSpan()); - controller.getSelectionManager().setSelectedSpan(span); - } - - public void shrinkSelectedSpanEnd() { - Span span = controller.getSelectionManager().getSelectedSpan(); - allSpanCollection.remove(span); - span.shrinkEnd(); - allSpanCollection.add(span); - controller.getSelectionManager().setSelectedSpan(span); - } - - public void shrinkSelectedSpanStart() { - Span span = controller.getSelectionManager().getSelectedSpan(); - allSpanCollection.remove(span); - span.shrinkStart(); - allSpanCollection.add(span); - controller.getSelectionManager().setSelectedSpan(span); - } - - @SuppressWarnings("unused") - public void findOverlaps() { - List overlappingSpans = new ArrayList<>(); - allSpanCollection.forEach( - span -> { - List toRemove = new ArrayList<>(); - overlappingSpans.forEach( - span1 -> { - if (span.intersects(span1)) { - span.getAnnotation().addOverlappingAnnotation(span1.getAnnotation()); - span1.getAnnotation().addOverlappingAnnotation(span.getAnnotation()); - } else { - toRemove.add(span1); - } - }); - overlappingSpans.removeAll(toRemove); - - overlappingSpans.add(span); - }); - } - - public Annotation getAnnotation(String annotationID) { - return annotationCollection.get(annotationID); - } - - public GraphSpace addGraphSpace(String title) { - GraphSpace newGraphSpace = new GraphSpace(controller, textSource, title); - graphSpaceCollection.add(newGraphSpace); - controller.getSelectionManager().setSelectedGraphSpace(newGraphSpace); - return newGraphSpace; - } - - public void writeToKnowtatorXML(Document dom, Element textSourceElement) { - annotationCollection - .forEach(annotation -> annotation.writeToKnowtatorXML(dom, textSourceElement)); - graphSpaceCollection - .forEach(graphSpace -> graphSpace.writeToKnowtatorXML(dom, textSourceElement)); - } - - @Override - public void readFromKnowtatorXML(File file, Element parent) { - for (Node annotationNode : - KnowtatorXMLUtil.asList(parent.getElementsByTagName(KnowtatorXMLTags.ANNOTATION))) { - Element annotationElement = (Element) annotationNode; - - String annotationID = annotationElement.getAttribute(KnowtatorXMLAttributes.ID); - String profileID = annotationElement.getAttribute(KnowtatorXMLAttributes.ANNOTATOR); - String type = annotationElement.getAttribute(KnowtatorXMLAttributes.TYPE); - - Profile profile = controller.getProfileManager().getProfile(profileID); - String owlClassID = - ((Element) annotationElement.getElementsByTagName(KnowtatorXMLTags.CLASS).item(0)) - .getAttribute(KnowtatorXMLAttributes.ID); - - Annotation newAnnotation = - new Annotation(controller, annotationID, null, owlClassID, profile, type, textSource); - newAnnotation.readFromKnowtatorXML(null, annotationElement); - - addAnnotation(newAnnotation); - } - - for (Node graphSpaceNode : - KnowtatorXMLUtil.asList(parent.getElementsByTagName(KnowtatorXMLTags.GRAPH_SPACE))) { - Element graphSpaceElem = (Element) graphSpaceNode; - - String id = graphSpaceElem.getAttribute(KnowtatorXMLAttributes.ID); - GraphSpace graphSpace = addGraphSpace(id); - - graphSpace.readFromKnowtatorXML(null, graphSpaceElem); - } - } - - @Override - public void readFromOldKnowtatorXML(File file, Element parent) { - - Map slotToClassIDMap = KnowtatorXMLUtil.getslotsFromXml(parent); - Map classMentionToClassIDMap = KnowtatorXMLUtil.getClassIDsFromXml(parent); - Map annotationToSlotMap = new HashMap<>(); - - for (Node annotationNode : - KnowtatorXMLUtil.asList(parent.getElementsByTagName(OldKnowtatorXMLTags.ANNOTATION))) { - Element annotationElement = (Element) annotationNode; - - Profile profile; - try { - String profileID = - annotationElement - .getElementsByTagName(OldKnowtatorXMLTags.ANNOTATOR) - .item(0) - .getTextContent(); - profile = controller.getProfileManager().addProfile(profileID); - } catch (NullPointerException npe) { - try { - String profileID = annotationElement.getAttribute(OldKnowtatorXMLAttributes.ANNOTATOR); - profile = controller.getProfileManager().addProfile(profileID); - } catch (NullPointerException npe2) { - profile = controller.getProfileManager().getDefaultProfile(); - } - } - - String annotationID = - ((Element) annotationElement.getElementsByTagName(OldKnowtatorXMLTags.MENTION).item(0)) - .getAttribute(OldKnowtatorXMLAttributes.ID); - Element classElement = classMentionToClassIDMap.get(annotationID); - - String owlClassID = - ((Element) classElement.getElementsByTagName(OldKnowtatorXMLTags.MENTION_CLASS).item(0)) - .getAttribute(OldKnowtatorXMLAttributes.ID); - - Annotation newAnnotation = - new Annotation( - controller, annotationID, null, owlClassID, profile, "identity", this.textSource); - - newAnnotation.readFromOldKnowtatorXML(null, annotationElement); - - // No need to keep annotations with no allSpanCollection - if (!newAnnotation.getSpanCollection().getCollection().isEmpty()) { - addAnnotation(newAnnotation); - - - for (Node slotMentionNode : - KnowtatorXMLUtil.asList( - classElement.getElementsByTagName(OldKnowtatorXMLTags.HAS_SLOT_MENTION))) { - Element slotMentionElement = (Element) slotMentionNode; - String slotMentionID = slotMentionElement.getAttribute(OldKnowtatorXMLAttributes.ID); - Element slotElement = slotToClassIDMap.get(slotMentionID); - if (slotElement != null) { - annotationToSlotMap.put(newAnnotation, slotElement); - } - } - } - } - - GraphSpace oldKnowtatorGraphSpace = addGraphSpace("Old Knowtator Relations"); - - annotationToSlotMap.forEach( - (annotation, slot) -> { - List vertices = oldKnowtatorGraphSpace.getVerticesForAnnotation(annotation); - - AnnotationNode source; - if (vertices.isEmpty()) { - source = oldKnowtatorGraphSpace.addNode(null, annotation); - } else { - source = (AnnotationNode) vertices.get(0); - } - - String propertyID = - ((Element) slot.getElementsByTagName(OldKnowtatorXMLTags.MENTION_SLOT).item(0)) - .getAttribute(OldKnowtatorXMLAttributes.ID); - for (Node slotMentionValueNode : - OldKnowatorUtil.asList( - slot.getElementsByTagName(OldKnowtatorXMLTags.COMPLEX_SLOT_MENTION_VALUE))) { - Element slotMentionValueElement = (Element) slotMentionValueNode; - String value = slotMentionValueElement.getAttribute(OldKnowtatorXMLAttributes.VALUE); - Annotation annotation1 = getAnnotation(value); - - List vertices1 = oldKnowtatorGraphSpace.getVerticesForAnnotation(annotation1); - - AnnotationNode target; - if (vertices1.isEmpty()) { - target = oldKnowtatorGraphSpace.addNode(null, annotation1); - } else { - target = (AnnotationNode) vertices1.get(0); - } - oldKnowtatorGraphSpace.addTriple( - source, - target, - null, - controller.getSelectionManager().getActiveProfile(), - null, propertyID, - "", ""); - } - }); - } - - @Override - public void readFromBratStandoff( - File file, Map> annotationCollection, String content) { - - Profile profile = controller.getProfileManager().getDefaultProfile(); - - annotationCollection - .get(StandoffTags.TEXTBOUNDANNOTATION) - .forEach( - annotation -> { - Annotation newAnnotation = - new Annotation( - controller, - annotation[0], - null, - annotation[1].split(StandoffTags.textBoundAnnotationTripleDelimiter)[0], - profile, - "identity", - textSource); - Map> map = new HashMap<>(); - List list = new ArrayList<>(); - list.add(annotation); - map.put(StandoffTags.TEXTBOUNDANNOTATION, list); - newAnnotation.readFromBratStandoff(null, map, content); - - addAnnotation(newAnnotation); - }); - - GraphSpace newGraphSpace = addGraphSpace("Brat Relation Graph"); - newGraphSpace.readFromBratStandoff(null, annotationCollection, null); - } - - @Override - public void writeToBratStandoff(Writer writer) throws IOException { - Iterator annotationIterator = annotationCollection.iterator(); - for (int i = 0; i < annotationCollection.size(); i++) { - Annotation annotation = annotationIterator.next(); - annotation.setBratID(String.format("T%d", i)); - - try { - writer.append(String.format("%s\t%s ", annotation.getBratID(), controller.getOWLAPIDataExtractor().getOWLEntityRendering(annotation.getOwlClass()))); - } catch (OWLWorkSpaceNotSetException | OWLEntityNullException e) { - writer.append(String.format("%s\t%s ", annotation.getBratID(), annotation.getOwlClassID())); - } - annotation.writeToBratStandoff(writer); - - writer.append( - String.format( - "\t%s\n", annotation.getSpanCollection().getCollection().first().getSpannedText())); - } - - int lastNumTriples = 0; - for (GraphSpace graphSpace : graphSpaceCollection) { - Object[] edges = graphSpace.getChildEdges(graphSpace.getDefaultParent()); - int bound = edges.length; - for (int i = 0; i < bound; i++) { - Object edge = edges[i]; - Triple triple = (Triple) edge; - triple.setBratID(String.format("R%d", lastNumTriples + i)); - String propertyID; - try { - propertyID = controller.getOWLAPIDataExtractor().getOWLEntityRendering(triple.getProperty()); - } catch (OWLEntityNullException | OWLWorkSpaceNotSetException e) { - propertyID = triple.getValue().toString(); - } - writer.append( - String.format( - "%s\t%s Arg1:%s Arg2:%s\n", - triple.getBratID(), - propertyID, - ((AnnotationNode) triple.getSource()).getAnnotation().getBratID(), - ((AnnotationNode) triple.getTarget()).getAnnotation().getBratID())); - } - } - } - - @Override - public void readFromGeniaXML(Element parent, String content) {} - - @Override - public void writeToGeniaXML(Document dom, Element parent) {} - - public GraphSpaceCollection getGraphSpaceCollection() { - return graphSpaceCollection; - } - - public void removeGraphSpace(GraphSpace graphSpace) { - graphSpaceCollection.remove(graphSpace); - } - - public void removeSelectedAnnotation() { - removeAnnotation(controller.getSelectionManager().getSelectedAnnotation()); - } - - public void addSelectedAnnotation() { - OWLClass owlClass = controller.getSelectionManager().getSelectedOWLClass(); - if (owlClass != null) { - Profile annotator = controller.getSelectionManager().getActiveProfile(); - int start = controller.getSelectionManager().getStart(); - int end = controller.getSelectionManager().getEnd(); - Span newSpan = new Span(null, start, end, textSource, controller); - - Annotation newAnnotation = - new Annotation(controller, null, owlClass, null, annotator, "identity", textSource); - addAnnotation(newAnnotation); - addSpanToAnnotation(newAnnotation, newSpan); - } - } - - SpanCollection getAllSpanCollection() { - return allSpanCollection; - } - - public void addSpanToSelectedAnnotation() { - addSpanToAnnotation( - controller.getSelectionManager().getSelectedAnnotation(), - new Span( - null, - controller.getSelectionManager().getStart(), - controller.getSelectionManager().getEnd(), - textSource, - controller)); - } -} +package edu.ucdenver.ccp.knowtator.model; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.io.brat.StandoffTags; +import edu.ucdenver.ccp.knowtator.io.knowtator.*; +import edu.ucdenver.ccp.knowtator.model.collection.AnnotationCollection; +import edu.ucdenver.ccp.knowtator.model.collection.GraphSpaceCollection; +import edu.ucdenver.ccp.knowtator.model.collection.SpanCollection; +import edu.ucdenver.ccp.knowtator.model.owl.OWLEntityNullException; +import edu.ucdenver.ccp.knowtator.model.owl.OWLWorkSpaceNotSetException; +import org.apache.log4j.Logger; +import org.semanticweb.owlapi.model.OWLClass; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import java.io.File; +import java.io.IOException; +import java.io.Writer; +import java.util.*; +import java.util.function.Supplier; +import java.util.stream.Collectors; + +public class AnnotationManager implements Savable { + + @SuppressWarnings("unused") + private static final Logger log = Logger.getLogger(AnnotationManager.class); + + private final KnowtatorController controller; + + private SpanCollection allSpanCollection; + private TextSource textSource; + private AnnotationCollection annotationCollection; + private GraphSpaceCollection graphSpaceCollection; + + AnnotationManager(KnowtatorController controller, TextSource textSource) { + this.controller = controller; + this.textSource = textSource; + annotationCollection = new AnnotationCollection(controller); + allSpanCollection = new SpanCollection(controller); + graphSpaceCollection = new GraphSpaceCollection(controller); + } + + public void addAnnotation(Annotation newAnnotation) { + annotationCollection.add(newAnnotation); + + allSpanCollection.getCollection().addAll(newAnnotation.getSpanCollection().getCollection()); + + controller.getSelectionManager().setSelectedAnnotation(newAnnotation, null); + } + + public void addSpanToAnnotation(Annotation annotation, Span newSpan) { + annotation.addSpan(newSpan); + allSpanCollection.add(newSpan); + controller.getSelectionManager().setSelectedSpan(newSpan); + } + + public void removeAnnotation(Annotation annotationToRemove) { + annotationCollection.remove(annotationToRemove); + for (Span span : annotationToRemove.getSpanCollection()) { + allSpanCollection.remove(span); + } + for (GraphSpace graphSpace : graphSpaceCollection) { + for (Object vertex : graphSpace.getVerticesForAnnotation(annotationToRemove)) { + graphSpace.setSelectionCell(vertex); + graphSpace.removeSelectedCell(); + } + } + controller.getSelectionManager().setSelectedAnnotation(null, null); + } + + public void removeSpanFromAnnotation(Annotation annotation, Span span) { + annotation.removeSpan(span); + allSpanCollection.remove(span); + } + + public AnnotationCollection getAnnotations() { + return annotationCollection; + } + + /** @param loc Location filter */ + public TreeSet getSpans(Integer loc, int start, int end) { + Supplier> supplier = () -> new TreeSet<>(Span::compare); + return allSpanCollection + .stream() + .filter( + span -> + (loc == null || span.contains(loc)) + && (start <= span.getStart() && span.getEnd() <= end) + && (!controller.getSelectionManager().isFilterByProfile() + || span.getAnnotation() + .getAnnotator() + .equals(controller.getSelectionManager().getActiveProfile()))) + .collect(Collectors.toCollection(supplier)); + } + + public void growSelectedSpanStart() { + Span span = controller.getSelectionManager().getSelectedSpan(); + allSpanCollection.remove(span); + span.growStart(); + allSpanCollection.add(span); + controller.getSelectionManager().setSelectedSpan(span); + } + + public void growSelectedSpanEnd() { + Span span = controller.getSelectionManager().getSelectedSpan(); + allSpanCollection.remove(span); + span.growEnd(textSource.getContent().length()); + allSpanCollection.add(controller.getSelectionManager().getSelectedSpan()); + controller.getSelectionManager().setSelectedSpan(span); + } + + public void shrinkSelectedSpanEnd() { + Span span = controller.getSelectionManager().getSelectedSpan(); + allSpanCollection.remove(span); + span.shrinkEnd(); + allSpanCollection.add(span); + controller.getSelectionManager().setSelectedSpan(span); + } + + public void shrinkSelectedSpanStart() { + Span span = controller.getSelectionManager().getSelectedSpan(); + allSpanCollection.remove(span); + span.shrinkStart(); + allSpanCollection.add(span); + controller.getSelectionManager().setSelectedSpan(span); + } + + @SuppressWarnings("unused") + public void findOverlaps() { + List overlappingSpans = new ArrayList<>(); + allSpanCollection.forEach( + span -> { + List toRemove = new ArrayList<>(); + overlappingSpans.forEach( + span1 -> { + if (span.intersects(span1)) { + span.getAnnotation().addOverlappingAnnotation(span1.getAnnotation()); + span1.getAnnotation().addOverlappingAnnotation(span.getAnnotation()); + } else { + toRemove.add(span1); + } + }); + overlappingSpans.removeAll(toRemove); + + overlappingSpans.add(span); + }); + } + + public Annotation getAnnotation(String annotationID) { + return annotationCollection.get(annotationID); + } + + public GraphSpace addGraphSpace(String title) { + GraphSpace newGraphSpace = new GraphSpace(controller, textSource, title); + graphSpaceCollection.add(newGraphSpace); + controller.getSelectionManager().setSelectedGraphSpace(newGraphSpace); + return newGraphSpace; + } + + public void writeToKnowtatorXML(Document dom, Element textSourceElement) { + annotationCollection + .forEach(annotation -> annotation.writeToKnowtatorXML(dom, textSourceElement)); + graphSpaceCollection + .forEach(graphSpace -> graphSpace.writeToKnowtatorXML(dom, textSourceElement)); + } + + @Override + public void readFromKnowtatorXML(File file, Element parent) { + for (Node annotationNode : + KnowtatorXMLUtil.asList(parent.getElementsByTagName(KnowtatorXMLTags.ANNOTATION))) { + Element annotationElement = (Element) annotationNode; + + String annotationID = annotationElement.getAttribute(KnowtatorXMLAttributes.ID); + String profileID = annotationElement.getAttribute(KnowtatorXMLAttributes.ANNOTATOR); + String type = annotationElement.getAttribute(KnowtatorXMLAttributes.TYPE); + + Profile profile = controller.getProfileManager().getProfile(profileID); + String owlClassID = + ((Element) annotationElement.getElementsByTagName(KnowtatorXMLTags.CLASS).item(0)) + .getAttribute(KnowtatorXMLAttributes.ID); + + Annotation newAnnotation = + new Annotation(controller, annotationID, null, owlClassID, profile, type, textSource); + newAnnotation.readFromKnowtatorXML(null, annotationElement); + + addAnnotation(newAnnotation); + } + + for (Node graphSpaceNode : + KnowtatorXMLUtil.asList(parent.getElementsByTagName(KnowtatorXMLTags.GRAPH_SPACE))) { + Element graphSpaceElem = (Element) graphSpaceNode; + + String id = graphSpaceElem.getAttribute(KnowtatorXMLAttributes.ID); + GraphSpace graphSpace = addGraphSpace(id); + + graphSpace.readFromKnowtatorXML(null, graphSpaceElem); + } + } + + @Override + public void readFromOldKnowtatorXML(File file, Element parent) { + + Map slotToClassIDMap = KnowtatorXMLUtil.getslotsFromXml(parent); + Map classMentionToClassIDMap = KnowtatorXMLUtil.getClassIDsFromXml(parent); + Map annotationToSlotMap = new HashMap<>(); + + for (Node annotationNode : + KnowtatorXMLUtil.asList(parent.getElementsByTagName(OldKnowtatorXMLTags.ANNOTATION))) { + Element annotationElement = (Element) annotationNode; + + Profile profile; + try { + String profileID = + annotationElement + .getElementsByTagName(OldKnowtatorXMLTags.ANNOTATOR) + .item(0) + .getTextContent(); + profile = controller.getProfileManager().addProfile(profileID); + } catch (NullPointerException npe) { + try { + String profileID = annotationElement.getAttribute(OldKnowtatorXMLAttributes.ANNOTATOR); + profile = controller.getProfileManager().addProfile(profileID); + } catch (NullPointerException npe2) { + profile = controller.getProfileManager().getDefaultProfile(); + } + } + + String annotationID = + ((Element) annotationElement.getElementsByTagName(OldKnowtatorXMLTags.MENTION).item(0)) + .getAttribute(OldKnowtatorXMLAttributes.ID); + Element classElement = classMentionToClassIDMap.get(annotationID); + + String owlClassID = + ((Element) classElement.getElementsByTagName(OldKnowtatorXMLTags.MENTION_CLASS).item(0)) + .getAttribute(OldKnowtatorXMLAttributes.ID); + + Annotation newAnnotation = + new Annotation( + controller, annotationID, null, owlClassID, profile, "identity", this.textSource); + + newAnnotation.readFromOldKnowtatorXML(null, annotationElement); + + // No need to keep annotations with no allSpanCollection + if (!newAnnotation.getSpanCollection().getCollection().isEmpty()) { + addAnnotation(newAnnotation); + + + for (Node slotMentionNode : + KnowtatorXMLUtil.asList( + classElement.getElementsByTagName(OldKnowtatorXMLTags.HAS_SLOT_MENTION))) { + Element slotMentionElement = (Element) slotMentionNode; + String slotMentionID = slotMentionElement.getAttribute(OldKnowtatorXMLAttributes.ID); + Element slotElement = slotToClassIDMap.get(slotMentionID); + if (slotElement != null) { + annotationToSlotMap.put(newAnnotation, slotElement); + } + } + } + } + + GraphSpace oldKnowtatorGraphSpace = addGraphSpace("Old Knowtator Relations"); + + annotationToSlotMap.forEach( + (annotation, slot) -> { + List vertices = oldKnowtatorGraphSpace.getVerticesForAnnotation(annotation); + + AnnotationNode source; + if (vertices.isEmpty()) { + source = oldKnowtatorGraphSpace.addNode(null, annotation); + } else { + source = (AnnotationNode) vertices.get(0); + } + + String propertyID = + ((Element) slot.getElementsByTagName(OldKnowtatorXMLTags.MENTION_SLOT).item(0)) + .getAttribute(OldKnowtatorXMLAttributes.ID); + for (Node slotMentionValueNode : + OldKnowatorUtil.asList( + slot.getElementsByTagName(OldKnowtatorXMLTags.COMPLEX_SLOT_MENTION_VALUE))) { + Element slotMentionValueElement = (Element) slotMentionValueNode; + String value = slotMentionValueElement.getAttribute(OldKnowtatorXMLAttributes.VALUE); + Annotation annotation1 = getAnnotation(value); + + List vertices1 = oldKnowtatorGraphSpace.getVerticesForAnnotation(annotation1); + + AnnotationNode target; + if (vertices1.isEmpty()) { + target = oldKnowtatorGraphSpace.addNode(null, annotation1); + } else { + target = (AnnotationNode) vertices1.get(0); + } + oldKnowtatorGraphSpace.addTriple( + source, + target, + null, + controller.getSelectionManager().getActiveProfile(), + null, propertyID, + "", ""); + } + }); + } + + @Override + public void readFromBratStandoff( + File file, Map> annotationCollection, String content) { + + Profile profile = controller.getProfileManager().getDefaultProfile(); + + annotationCollection + .get(StandoffTags.TEXTBOUNDANNOTATION) + .forEach( + annotation -> { + Annotation newAnnotation = + new Annotation( + controller, + annotation[0], + null, + annotation[1].split(StandoffTags.textBoundAnnotationTripleDelimiter)[0], + profile, + "identity", + textSource); + Map> map = new HashMap<>(); + List list = new ArrayList<>(); + list.add(annotation); + map.put(StandoffTags.TEXTBOUNDANNOTATION, list); + newAnnotation.readFromBratStandoff(null, map, content); + + addAnnotation(newAnnotation); + }); + + GraphSpace newGraphSpace = addGraphSpace("Brat Relation Graph"); + newGraphSpace.readFromBratStandoff(null, annotationCollection, null); + } + + @Override + public void writeToBratStandoff(Writer writer) throws IOException { + Iterator annotationIterator = annotationCollection.iterator(); + for (int i = 0; i < annotationCollection.size(); i++) { + Annotation annotation = annotationIterator.next(); + annotation.setBratID(String.format("T%d", i)); + + try { + writer.append(String.format("%s\t%s ", annotation.getBratID(), controller.getOWLAPIDataExtractor().getOWLEntityRendering(annotation.getOwlClass()))); + } catch (OWLWorkSpaceNotSetException | OWLEntityNullException e) { + writer.append(String.format("%s\t%s ", annotation.getBratID(), annotation.getOwlClassID())); + } + annotation.writeToBratStandoff(writer); + + writer.append( + String.format( + "\t%s\n", annotation.getSpanCollection().getCollection().first().getSpannedText())); + } + + int lastNumTriples = 0; + for (GraphSpace graphSpace : graphSpaceCollection) { + Object[] edges = graphSpace.getChildEdges(graphSpace.getDefaultParent()); + int bound = edges.length; + for (int i = 0; i < bound; i++) { + Object edge = edges[i]; + Triple triple = (Triple) edge; + triple.setBratID(String.format("R%d", lastNumTriples + i)); + String propertyID; + try { + propertyID = controller.getOWLAPIDataExtractor().getOWLEntityRendering(triple.getProperty()); + } catch (OWLEntityNullException | OWLWorkSpaceNotSetException e) { + propertyID = triple.getValue().toString(); + } + writer.append( + String.format( + "%s\t%s Arg1:%s Arg2:%s\n", + triple.getBratID(), + propertyID, + ((AnnotationNode) triple.getSource()).getAnnotation().getBratID(), + ((AnnotationNode) triple.getTarget()).getAnnotation().getBratID())); + } + } + } + + @Override + public void readFromGeniaXML(Element parent, String content) {} + + @Override + public void writeToGeniaXML(Document dom, Element parent) {} + + public GraphSpaceCollection getGraphSpaceCollection() { + return graphSpaceCollection; + } + + public void removeGraphSpace(GraphSpace graphSpace) { + graphSpaceCollection.remove(graphSpace); + } + + public void removeSelectedAnnotation() { + removeAnnotation(controller.getSelectionManager().getSelectedAnnotation()); + } + + public void addSelectedAnnotation() { + OWLClass owlClass = controller.getSelectionManager().getSelectedOWLClass(); + if (owlClass != null) { + Profile annotator = controller.getSelectionManager().getActiveProfile(); + int start = controller.getSelectionManager().getStart(); + int end = controller.getSelectionManager().getEnd(); + Span newSpan = new Span(null, start, end, textSource, controller); + + Annotation newAnnotation = + new Annotation(controller, null, owlClass, null, annotator, "identity", textSource); + addAnnotation(newAnnotation); + addSpanToAnnotation(newAnnotation, newSpan); + } + } + + SpanCollection getAllSpanCollection() { + return allSpanCollection; + } + + public void addSpanToSelectedAnnotation() { + addSpanToAnnotation( + controller.getSelectionManager().getSelectedAnnotation(), + new Span( + null, + controller.getSelectionManager().getStart(), + controller.getSelectionManager().getEnd(), + textSource, + controller)); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/AnnotationNode.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/AnnotationNode.java index 2b756517..f90a8a0e 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/AnnotationNode.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/AnnotationNode.java @@ -1,78 +1,78 @@ -package edu.ucdenver.ccp.knowtator.model; - -import com.mxgraph.model.mxCell; -import com.mxgraph.model.mxGeometry; -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLAttributes; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLTags; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.List; -import java.util.Map; - -public class AnnotationNode extends mxCell implements Savable, KnowtatorObject { - - private Annotation annotation; - private TextSource textSource; - - AnnotationNode(KnowtatorController controller, String id, Annotation annotation, TextSource textSource) { - super( - annotation.getSpannedText(), - new mxGeometry(20, 20, 150, 150), - "fontSize=16;fontColor=black;strokeColor=black"); - this.textSource = textSource; - this.annotation = annotation; - - controller.verifyId(id, this, false); - - setVertex(true); - setConnectable(true); - } - - @Override - public void writeToKnowtatorXML(Document dom, Element parent) { - Element vertexElem = dom.createElement(KnowtatorXMLTags.VERTEX); - vertexElem.setAttribute(KnowtatorXMLAttributes.ID, getId()); - vertexElem.setAttribute(KnowtatorXMLTags.ANNOTATION, annotation.getId()); - parent.appendChild(vertexElem); - } - - @Override - public void readFromKnowtatorXML(File file, Element parent) { - } - - @Override - public void readFromOldKnowtatorXML(File file, Element parent) { - } - - @Override - public void readFromBratStandoff( - File file, Map> annotationMap, String content) { - } - - @SuppressWarnings("RedundantThrows") - @Override - public void writeToBratStandoff(Writer writer) throws IOException { - } - - @Override - public void readFromGeniaXML(Element parent, String content) { - } - - @Override - public void writeToGeniaXML(Document dom, Element parent) { - } - - public Annotation getAnnotation() { - return annotation; - } - - @Override - public TextSource getTextSource() { - return textSource; - } -} +package edu.ucdenver.ccp.knowtator.model; + +import com.mxgraph.model.mxCell; +import com.mxgraph.model.mxGeometry; +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLAttributes; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLTags; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import java.io.File; +import java.io.IOException; +import java.io.Writer; +import java.util.List; +import java.util.Map; + +public class AnnotationNode extends mxCell implements Savable, KnowtatorObject { + + private Annotation annotation; + private TextSource textSource; + + AnnotationNode(KnowtatorController controller, String id, Annotation annotation, TextSource textSource) { + super( + annotation.getSpannedText(), + new mxGeometry(20, 20, 150, 150), + "fontSize=16;fontColor=black;strokeColor=black"); + this.textSource = textSource; + this.annotation = annotation; + + controller.verifyId(id, this, false); + + setVertex(true); + setConnectable(true); + } + + @Override + public void writeToKnowtatorXML(Document dom, Element parent) { + Element vertexElem = dom.createElement(KnowtatorXMLTags.VERTEX); + vertexElem.setAttribute(KnowtatorXMLAttributes.ID, getId()); + vertexElem.setAttribute(KnowtatorXMLTags.ANNOTATION, annotation.getId()); + parent.appendChild(vertexElem); + } + + @Override + public void readFromKnowtatorXML(File file, Element parent) { + } + + @Override + public void readFromOldKnowtatorXML(File file, Element parent) { + } + + @Override + public void readFromBratStandoff( + File file, Map> annotationMap, String content) { + } + + @SuppressWarnings("RedundantThrows") + @Override + public void writeToBratStandoff(Writer writer) throws IOException { + } + + @Override + public void readFromGeniaXML(Element parent, String content) { + } + + @Override + public void writeToGeniaXML(Document dom, Element parent) { + } + + public Annotation getAnnotation() { + return annotation; + } + + @Override + public TextSource getTextSource() { + return textSource; + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/GraphSpace.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/GraphSpace.java index 032e3981..3fc2de51 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/GraphSpace.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/GraphSpace.java @@ -1,533 +1,533 @@ -package edu.ucdenver.ccp.knowtator.model; - -import com.mxgraph.model.mxCell; -import com.mxgraph.model.mxGeometry; -import com.mxgraph.model.mxGraphModel; -import com.mxgraph.model.mxICell; -import com.mxgraph.util.mxConstants; -import com.mxgraph.util.mxEvent; -import com.mxgraph.view.mxGraph; -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.events.AnnotationChangeEvent; -import edu.ucdenver.ccp.knowtator.io.brat.StandoffTags; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLAttributes; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLTags; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLUtil; -import edu.ucdenver.ccp.knowtator.listeners.AnnotationSelectionListener; -import edu.ucdenver.ccp.knowtator.listeners.GraphSpaceListener; -import edu.ucdenver.ccp.knowtator.model.owl.OWLEntityNullException; -import edu.ucdenver.ccp.knowtator.model.owl.OWLWorkSpaceNotSetException; -import org.apache.log4j.Logger; -import org.semanticweb.owlapi.model.OWLObjectProperty; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -import javax.swing.*; -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.*; -import java.util.stream.Collectors; - -public class GraphSpace extends mxGraph - implements Savable, KnowtatorObject, AnnotationSelectionListener { - @SuppressWarnings("unused") - private Logger log = Logger.getLogger(GraphSpace.class); - - private String id; - private KnowtatorController controller; - private TextSource textSource; - private int graphTextStart; - private int graphTextEnd; - private List listeners; - private boolean areListenersSet; - - public GraphSpace(KnowtatorController controller, TextSource textSource, String id) { - - this.controller = controller; - this.textSource = textSource; - - controller.verifyId(id, this, false); - controller.getSelectionManager().addAnnotationListener(this); - - setCellsResizable(false); - setEdgeLabelsMovable(false); - setAllowDanglingEdges(false); - setCellsEditable(false); - setConnectableEdges(false); - setCellsBendable(false); - setResetEdgesOnMove(true); - listeners = new ArrayList<>(); - areListenersSet = false; - } - - public static int compare(GraphSpace graphSpace1, GraphSpace graphSpace2) { - if (graphSpace1 == graphSpace2) { - return 0; - } - if (graphSpace1 == null) { - return -1; - } - if (graphSpace2 == null) { - return 1; - } - return graphSpace1.getId().toLowerCase().compareTo(graphSpace2.getId().toLowerCase()); - } - - /* - ADDERS - */ - - public void addGraphSpaceListener(GraphSpaceListener listener) { - listeners.add(listener); - } - - public void removeGraphSpaceListener(GraphSpaceListener listener) { - listeners.add(listener); - } - - private void addCellToGraph(mxCell cell) { - getModel().beginUpdate(); - try { - addCell(cell); - } finally { - // reDrawGraph(); - getModel().endUpdate(); - } - - // reDrawGraph(); - } - - public AnnotationNode addNode(String id, Annotation annotation) { - if (annotation != null) { - id = verifyID(id, "node"); - - AnnotationNode newVertex = new AnnotationNode(controller, id, annotation, textSource); - addCellToGraph(newVertex); - - return newVertex; - } else { - return null; - } - } - - public void addTriple( - AnnotationNode source, - AnnotationNode target, - String id, - Profile annotator, - OWLObjectProperty property, - String propertyID, - String quantifier, - String quantifierValue) { - id = verifyID(id, "edge"); - - Triple newTriple; - try { - newTriple = new Triple( - id, - source, - target, - property, - annotator, - quantifier, - quantifierValue, - controller, - textSource, - this); - } catch (OWLEntityNullException | OWLWorkSpaceNotSetException e) { - newTriple = new Triple( - id, - source, - target, - propertyID, - annotator, - quantifier, - quantifierValue, - controller, - textSource, - this); - } - - setCellStyles(mxConstants.STYLE_STARTARROW, "dash", new Object[] {newTriple}); - setCellStyles(mxConstants.STYLE_STARTSIZE, "12", new Object[] {newTriple}); - setCellStyles(mxConstants.STYLE_ENDARROW, "block", new Object[] {newTriple}); - setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN, "top", new Object[] {newTriple}); - setCellStyles(mxConstants.STYLE_VERTICAL_LABEL_POSITION, "top", new Object[] {newTriple}); - setCellStyles(mxConstants.STYLE_FONTSIZE, "16", new Object[] {newTriple}); - - addCellToGraph(newTriple); - } - - /* - REMOVERS - */ - - private String verifyID(String id, String idPrefix) { - if (id == null) { - id = String.format("%s_%d", idPrefix, getChildCells(getDefaultParent()).length); - } - while (((mxGraphModel) getModel()).getCells().containsKey(id)) { - int vertexIDIndex = Integer.parseInt(id.split(String.format("%s_", idPrefix))[1]); - id = String.format("%s_%d", idPrefix, ++vertexIDIndex); - } - - return id; - } - - /* - I/O - */ - - public void removeSelectedCell() { - // Object cell = getSelectionModel().getCell(); - // Arrays.stream(getEdges(cell)).forEach(edge -> getModel().remove(edge)); - removeCells(getSelectionCells(), true); - // reDrawGraph(); - } - - @Override - public void readFromKnowtatorXML(File file, Element parent) { - for (Node graphVertexNode : - KnowtatorXMLUtil.asList(parent.getElementsByTagName(KnowtatorXMLTags.VERTEX))) { - Element graphVertexElem = (Element) graphVertexNode; - - String id = graphVertexElem.getAttribute(KnowtatorXMLAttributes.ID); - String annotationID = graphVertexElem.getAttribute(KnowtatorXMLTags.ANNOTATION); - - Annotation annotation = this.textSource.getAnnotationManager().getAnnotation(annotationID); - addNode(id, annotation); - } - - for (Node tripleNode : - KnowtatorXMLUtil.asList(parent.getElementsByTagName(KnowtatorXMLTags.TRIPLE))) { - Element tripleElem = (Element) tripleNode; - - String id = tripleElem.getAttribute(KnowtatorXMLAttributes.ID); - String annotatorID = tripleElem.getAttribute(KnowtatorXMLAttributes.ANNOTATOR); - String subjectID = tripleElem.getAttribute(KnowtatorXMLAttributes.TRIPLE_SUBJECT); - String objectID = tripleElem.getAttribute(KnowtatorXMLAttributes.TRIPLE_OBJECT); - String propertyID = tripleElem.getAttribute(KnowtatorXMLAttributes.TRIPLE_PROPERTY); - String quantifier = tripleElem.getAttribute(KnowtatorXMLAttributes.TRIPLE_QUANTIFIER); - String quantifierValue = tripleElem.getAttribute(KnowtatorXMLAttributes.TRIPLE_VALUE); - - Profile annotator = controller.getProfileManager().addProfile(annotatorID); - AnnotationNode source = - (AnnotationNode) ((mxGraphModel) getModel()).getCells().get(subjectID); - AnnotationNode target = (AnnotationNode) ((mxGraphModel) getModel()).getCells().get(objectID); - - if (target != null && source != null) { - addTriple(source, target, id, annotator, null, propertyID, quantifier, quantifierValue); - } - } - } - - @Override - public void readFromOldKnowtatorXML(File file, Element parent) {} - - @Override - public void readFromBratStandoff( - File file, Map> annotationMap, String content) { - annotationMap - .get(StandoffTags.RELATION) - .forEach( - annotation -> { - String id = annotation[0]; - - String[] relationTriple = annotation[1].split(StandoffTags.relationTripleDelimiter); - String propertyID = relationTriple[0]; - String subjectAnnotationID = - relationTriple[1].split(StandoffTags.relationTripleRoleIDDelimiter)[1]; - String objectAnnotationID = - relationTriple[2].split(StandoffTags.relationTripleRoleIDDelimiter)[1]; - - Profile annotator = controller.getProfileManager().getDefaultProfile(); - - Annotation subjectAnnotation = - textSource.getAnnotationManager().getAnnotation(subjectAnnotationID); - List subjectAnnotationVertices = getVerticesForAnnotation(subjectAnnotation); - AnnotationNode source; - if (subjectAnnotationVertices.size() == 0) { - source = addNode(null, subjectAnnotation); - } else { - source = (AnnotationNode) subjectAnnotationVertices.get(0); - } - - Annotation objectAnnotation = - textSource.getAnnotationManager().getAnnotation(objectAnnotationID); - List objectAnnotationVertices = getVerticesForAnnotation(objectAnnotation); - AnnotationNode target; - if (objectAnnotationVertices.size() == 0) { - target = addNode(null, objectAnnotation); - } else { - target = (AnnotationNode) objectAnnotationVertices.get(0); - } - - addTriple(source, target, id, annotator, null, propertyID, "", ""); - }); - } - - @SuppressWarnings("RedundantThrows") - @Override - public void writeToBratStandoff(Writer writer) throws IOException {} - - @Override - public void readFromGeniaXML(Element parent, String content) {} - - @Override - public void writeToGeniaXML(Document dom, Element parent) {} - - @Override - public void writeToKnowtatorXML(Document dom, Element textSourceElement) { - Element graphElem = dom.createElement(KnowtatorXMLTags.GRAPH_SPACE); - graphElem.setAttribute(KnowtatorXMLAttributes.ID, id); - Arrays.stream(getChildVertices(getDefaultParent())) - .forEach( - vertex -> { - if (vertex instanceof AnnotationNode) { - ((AnnotationNode) vertex).writeToKnowtatorXML(dom, graphElem); - } - }); - Arrays.stream(getChildEdges(getDefaultParent())) - .forEach( - edge -> { - if (edge instanceof Triple) { - ((Triple) edge).writeToKnowtatorXML(dom, graphElem); - } - }); - textSourceElement.appendChild(graphElem); - } - - /* - UPDATE - */ - public void reDrawGraph() { - if (controller.getProjectManager().isProjectLoaded()) { - getModel().beginUpdate(); - try { - Arrays.stream(getChildVertices(getDefaultParent())) - .forEach( - vertex -> { - if (vertex instanceof AnnotationNode) { - setVertexStyle((AnnotationNode) vertex); - } - updateCellSize(vertex); - - getView().validateCell(vertex); - }); - Arrays.stream(getChildEdges(getDefaultParent())) - .forEach( - edge -> { - updateCellSize(edge); - // if (edge instanceof Triple) { - // ((Triple) edge).setValue(((Triple) edge).getValue()); - // } - getView().validateCell(edge); - }); - } finally { - getModel().endUpdate(); - refresh(); - } - } - } - - public void setupListeners() { - // Handle drag and drop - // Adds the current selected object property as the edge value - if (!areListenersSet) { - addListener( - mxEvent.ADD_CELLS, - (sender, evt) -> { - Object[] cells = (Object[]) evt.getProperty("cells"); - if (cells != null && cells.length > 0) { - for (Object cell : cells) { - if (getModel().isEdge(cell) && "".equals(((mxCell) cell).getValue())) { - mxCell edge = (mxCell) cell; - OWLObjectProperty property = - controller.getSelectionManager().getSelectedOWLObjectProperty(); - String propertyID = null; - try { - propertyID = - controller.getOWLAPIDataExtractor().getOWLEntityRendering(property); - } catch (OWLWorkSpaceNotSetException | OWLEntityNullException ignored) { - - } - if (property != null) { - mxICell source = edge.getSource(); - mxICell target = edge.getTarget(); - - JTextField quantifierField = new JTextField(10); - JTextField valueField = new JTextField(10); - JPanel restrictionPanel = new JPanel(); - restrictionPanel.add(new JLabel("Quantifier:")); - restrictionPanel.add(quantifierField); - restrictionPanel.add(Box.createHorizontalStrut(15)); - restrictionPanel.add(new JLabel("Value:")); - restrictionPanel.add(valueField); - - String quantifier = ""; - String value = ""; - int result = - JOptionPane.showConfirmDialog( - null, - restrictionPanel, - "Restriction options", - JOptionPane.DEFAULT_OPTION); - if (result == JOptionPane.OK_OPTION) { - quantifier = quantifierField.getText(); - value = valueField.getText(); - } - - addTriple( - (AnnotationNode) source, - (AnnotationNode) target, - null, - controller.getSelectionManager().getActiveProfile(), - property, - propertyID, - quantifier, - value); - } - - getModel().remove(edge); - } - } - - reDrawGraph(); - } - }); - - addListener(mxEvent.MOVE_CELLS, (sender, evt) -> reDrawGraph()); - - addListener(mxEvent.REMOVE_CELLS, (sender, evt) -> reDrawGraph()); - - getSelectionModel() - .addListener( - mxEvent.CHANGE, - (sender, evt) -> { - Collection selectedCells = (Collection) evt.getProperty("removed"); - Collection deselectedCells = (Collection) evt.getProperty("added"); - if (deselectedCells != null && deselectedCells.size() > 0) { - for (Object cell : deselectedCells) { - setCellStyles(mxConstants.STYLE_STROKEWIDTH, "0", new Object[] {cell}); - } - // Arrays.stream(graph.getChildVertices(graph.getDefaultParent())) - // .forEach( - // cell -> - // graph.setCellStyles( - // mxConstants.STYLE_STROKEWIDTH, "0", new Object[] - // {cell})); - reDrawGraph(); - } - - if (selectedCells != null && selectedCells.size() > 0) { - for (Object cell : selectedCells) { - if (cell instanceof AnnotationNode) { - Annotation annotation = ((AnnotationNode) cell).getAnnotation(); - - controller.getSelectionManager().setSelectedAnnotation(annotation, null); - - setCellStyles(mxConstants.STYLE_STROKEWIDTH, "4", new Object[] {cell}); - - } else if (cell instanceof Triple) { - OWLObjectProperty value = ((Triple) cell).getProperty(); - - controller - .getSelectionManager() - .setSelectedOWLObjectProperty(value); - } - } - reDrawGraph(); - } - }); - areListenersSet = true; - } - } - - private void setVertexStyle(AnnotationNode vertex) { - mxGeometry g = vertex.getGeometry(); - g.setHeight(g.getHeight() + 200); - g.setWidth(g.getWidth() + 200); - - String color = - Integer.toHexString( - controller - .getSelectionManager() - .getActiveProfile() - .getColor(vertex.getAnnotation()) - .getRGB()) - .substring(2); - String shape = mxConstants.SHAPE_RECTANGLE; - - setCellStyles(mxConstants.STYLE_SHAPE, shape, new Object[] {vertex}); - setCellStyles(mxConstants.STYLE_FILLCOLOR, color, new Object[] {vertex}); - } - - /* - GETTERS, CHECKERS, SETTERS - */ - - public AnnotationNode containsVertexCorrespondingToAnnotation(Annotation selectedAnnotation) { - for (Object o : getChildVertices(getDefaultParent())) { - if (o instanceof AnnotationNode - && ((AnnotationNode) o).getAnnotation().equals(selectedAnnotation)) { - return (AnnotationNode) o; - } - } - return null; - } - - public List getVerticesForAnnotation(Annotation annotation) { - return Arrays.stream(getChildVertices(getDefaultParent())) - .filter( - o -> - o instanceof AnnotationNode - && annotation.equals(((AnnotationNode) o).getAnnotation())) - .collect(Collectors.toList()); - } - - @Override - public TextSource getTextSource() { - return textSource; - } - - @Override - public String toString() { - return id; - } - - public int getGraphTextStart() { - return graphTextStart; - } - - public int getGraphTextEnd() { - return graphTextEnd; - } - - public void setGraphText(int start, int end) { - graphTextStart = start; - graphTextEnd = end; - - listeners.forEach(listener -> listener.graphTextChanged(textSource, start, end)); - } - - @Override - public String getId() { - return id; - } - - @Override - public void setId(String id) { - this.id = id; - } - - @Override - public void selectedAnnotationChanged(AnnotationChangeEvent e) { - if (e.getNew() != null) { - setSelectionCells(getVerticesForAnnotation(e.getNew())); - } else { - setSelectionCell(null); - } - } -} +package edu.ucdenver.ccp.knowtator.model; + +import com.mxgraph.model.mxCell; +import com.mxgraph.model.mxGeometry; +import com.mxgraph.model.mxGraphModel; +import com.mxgraph.model.mxICell; +import com.mxgraph.util.mxConstants; +import com.mxgraph.util.mxEvent; +import com.mxgraph.view.mxGraph; +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.events.AnnotationChangeEvent; +import edu.ucdenver.ccp.knowtator.io.brat.StandoffTags; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLAttributes; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLTags; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLUtil; +import edu.ucdenver.ccp.knowtator.listeners.AnnotationSelectionListener; +import edu.ucdenver.ccp.knowtator.listeners.GraphSpaceListener; +import edu.ucdenver.ccp.knowtator.model.owl.OWLEntityNullException; +import edu.ucdenver.ccp.knowtator.model.owl.OWLWorkSpaceNotSetException; +import org.apache.log4j.Logger; +import org.semanticweb.owlapi.model.OWLObjectProperty; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import javax.swing.*; +import java.io.File; +import java.io.IOException; +import java.io.Writer; +import java.util.*; +import java.util.stream.Collectors; + +public class GraphSpace extends mxGraph + implements Savable, KnowtatorObject, AnnotationSelectionListener { + @SuppressWarnings("unused") + private Logger log = Logger.getLogger(GraphSpace.class); + + private String id; + private KnowtatorController controller; + private TextSource textSource; + private int graphTextStart; + private int graphTextEnd; + private List listeners; + private boolean areListenersSet; + + public GraphSpace(KnowtatorController controller, TextSource textSource, String id) { + + this.controller = controller; + this.textSource = textSource; + + controller.verifyId(id, this, false); + controller.getSelectionManager().addAnnotationListener(this); + + setCellsResizable(false); + setEdgeLabelsMovable(false); + setAllowDanglingEdges(false); + setCellsEditable(false); + setConnectableEdges(false); + setCellsBendable(false); + setResetEdgesOnMove(true); + listeners = new ArrayList<>(); + areListenersSet = false; + } + + public static int compare(GraphSpace graphSpace1, GraphSpace graphSpace2) { + if (graphSpace1 == graphSpace2) { + return 0; + } + if (graphSpace1 == null) { + return -1; + } + if (graphSpace2 == null) { + return 1; + } + return graphSpace1.getId().toLowerCase().compareTo(graphSpace2.getId().toLowerCase()); + } + + /* + ADDERS + */ + + public void addGraphSpaceListener(GraphSpaceListener listener) { + listeners.add(listener); + } + + public void removeGraphSpaceListener(GraphSpaceListener listener) { + listeners.add(listener); + } + + private void addCellToGraph(mxCell cell) { + getModel().beginUpdate(); + try { + addCell(cell); + } finally { + // reDrawGraph(); + getModel().endUpdate(); + } + + // reDrawGraph(); + } + + public AnnotationNode addNode(String id, Annotation annotation) { + if (annotation != null) { + id = verifyID(id, "node"); + + AnnotationNode newVertex = new AnnotationNode(controller, id, annotation, textSource); + addCellToGraph(newVertex); + + return newVertex; + } else { + return null; + } + } + + public void addTriple( + AnnotationNode source, + AnnotationNode target, + String id, + Profile annotator, + OWLObjectProperty property, + String propertyID, + String quantifier, + String quantifierValue) { + id = verifyID(id, "edge"); + + Triple newTriple; + try { + newTriple = new Triple( + id, + source, + target, + property, + annotator, + quantifier, + quantifierValue, + controller, + textSource, + this); + } catch (OWLEntityNullException | OWLWorkSpaceNotSetException e) { + newTriple = new Triple( + id, + source, + target, + propertyID, + annotator, + quantifier, + quantifierValue, + controller, + textSource, + this); + } + + setCellStyles(mxConstants.STYLE_STARTARROW, "dash", new Object[] {newTriple}); + setCellStyles(mxConstants.STYLE_STARTSIZE, "12", new Object[] {newTriple}); + setCellStyles(mxConstants.STYLE_ENDARROW, "block", new Object[] {newTriple}); + setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN, "top", new Object[] {newTriple}); + setCellStyles(mxConstants.STYLE_VERTICAL_LABEL_POSITION, "top", new Object[] {newTriple}); + setCellStyles(mxConstants.STYLE_FONTSIZE, "16", new Object[] {newTriple}); + + addCellToGraph(newTriple); + } + + /* + REMOVERS + */ + + private String verifyID(String id, String idPrefix) { + if (id == null) { + id = String.format("%s_%d", idPrefix, getChildCells(getDefaultParent()).length); + } + while (((mxGraphModel) getModel()).getCells().containsKey(id)) { + int vertexIDIndex = Integer.parseInt(id.split(String.format("%s_", idPrefix))[1]); + id = String.format("%s_%d", idPrefix, ++vertexIDIndex); + } + + return id; + } + + /* + I/O + */ + + public void removeSelectedCell() { + // Object cell = getSelectionModel().getCell(); + // Arrays.stream(getEdges(cell)).forEach(edge -> getModel().remove(edge)); + removeCells(getSelectionCells(), true); + // reDrawGraph(); + } + + @Override + public void readFromKnowtatorXML(File file, Element parent) { + for (Node graphVertexNode : + KnowtatorXMLUtil.asList(parent.getElementsByTagName(KnowtatorXMLTags.VERTEX))) { + Element graphVertexElem = (Element) graphVertexNode; + + String id = graphVertexElem.getAttribute(KnowtatorXMLAttributes.ID); + String annotationID = graphVertexElem.getAttribute(KnowtatorXMLTags.ANNOTATION); + + Annotation annotation = this.textSource.getAnnotationManager().getAnnotation(annotationID); + addNode(id, annotation); + } + + for (Node tripleNode : + KnowtatorXMLUtil.asList(parent.getElementsByTagName(KnowtatorXMLTags.TRIPLE))) { + Element tripleElem = (Element) tripleNode; + + String id = tripleElem.getAttribute(KnowtatorXMLAttributes.ID); + String annotatorID = tripleElem.getAttribute(KnowtatorXMLAttributes.ANNOTATOR); + String subjectID = tripleElem.getAttribute(KnowtatorXMLAttributes.TRIPLE_SUBJECT); + String objectID = tripleElem.getAttribute(KnowtatorXMLAttributes.TRIPLE_OBJECT); + String propertyID = tripleElem.getAttribute(KnowtatorXMLAttributes.TRIPLE_PROPERTY); + String quantifier = tripleElem.getAttribute(KnowtatorXMLAttributes.TRIPLE_QUANTIFIER); + String quantifierValue = tripleElem.getAttribute(KnowtatorXMLAttributes.TRIPLE_VALUE); + + Profile annotator = controller.getProfileManager().addProfile(annotatorID); + AnnotationNode source = + (AnnotationNode) ((mxGraphModel) getModel()).getCells().get(subjectID); + AnnotationNode target = (AnnotationNode) ((mxGraphModel) getModel()).getCells().get(objectID); + + if (target != null && source != null) { + addTriple(source, target, id, annotator, null, propertyID, quantifier, quantifierValue); + } + } + } + + @Override + public void readFromOldKnowtatorXML(File file, Element parent) {} + + @Override + public void readFromBratStandoff( + File file, Map> annotationMap, String content) { + annotationMap + .get(StandoffTags.RELATION) + .forEach( + annotation -> { + String id = annotation[0]; + + String[] relationTriple = annotation[1].split(StandoffTags.relationTripleDelimiter); + String propertyID = relationTriple[0]; + String subjectAnnotationID = + relationTriple[1].split(StandoffTags.relationTripleRoleIDDelimiter)[1]; + String objectAnnotationID = + relationTriple[2].split(StandoffTags.relationTripleRoleIDDelimiter)[1]; + + Profile annotator = controller.getProfileManager().getDefaultProfile(); + + Annotation subjectAnnotation = + textSource.getAnnotationManager().getAnnotation(subjectAnnotationID); + List subjectAnnotationVertices = getVerticesForAnnotation(subjectAnnotation); + AnnotationNode source; + if (subjectAnnotationVertices.size() == 0) { + source = addNode(null, subjectAnnotation); + } else { + source = (AnnotationNode) subjectAnnotationVertices.get(0); + } + + Annotation objectAnnotation = + textSource.getAnnotationManager().getAnnotation(objectAnnotationID); + List objectAnnotationVertices = getVerticesForAnnotation(objectAnnotation); + AnnotationNode target; + if (objectAnnotationVertices.size() == 0) { + target = addNode(null, objectAnnotation); + } else { + target = (AnnotationNode) objectAnnotationVertices.get(0); + } + + addTriple(source, target, id, annotator, null, propertyID, "", ""); + }); + } + + @SuppressWarnings("RedundantThrows") + @Override + public void writeToBratStandoff(Writer writer) throws IOException {} + + @Override + public void readFromGeniaXML(Element parent, String content) {} + + @Override + public void writeToGeniaXML(Document dom, Element parent) {} + + @Override + public void writeToKnowtatorXML(Document dom, Element textSourceElement) { + Element graphElem = dom.createElement(KnowtatorXMLTags.GRAPH_SPACE); + graphElem.setAttribute(KnowtatorXMLAttributes.ID, id); + Arrays.stream(getChildVertices(getDefaultParent())) + .forEach( + vertex -> { + if (vertex instanceof AnnotationNode) { + ((AnnotationNode) vertex).writeToKnowtatorXML(dom, graphElem); + } + }); + Arrays.stream(getChildEdges(getDefaultParent())) + .forEach( + edge -> { + if (edge instanceof Triple) { + ((Triple) edge).writeToKnowtatorXML(dom, graphElem); + } + }); + textSourceElement.appendChild(graphElem); + } + + /* + UPDATE + */ + public void reDrawGraph() { + if (controller.getProjectManager().isProjectLoaded()) { + getModel().beginUpdate(); + try { + Arrays.stream(getChildVertices(getDefaultParent())) + .forEach( + vertex -> { + if (vertex instanceof AnnotationNode) { + setVertexStyle((AnnotationNode) vertex); + } + updateCellSize(vertex); + + getView().validateCell(vertex); + }); + Arrays.stream(getChildEdges(getDefaultParent())) + .forEach( + edge -> { + updateCellSize(edge); + // if (edge instanceof Triple) { + // ((Triple) edge).setValue(((Triple) edge).getValue()); + // } + getView().validateCell(edge); + }); + } finally { + getModel().endUpdate(); + refresh(); + } + } + } + + public void setupListeners() { + // Handle drag and drop + // Adds the current selected object property as the edge value + if (!areListenersSet) { + addListener( + mxEvent.ADD_CELLS, + (sender, evt) -> { + Object[] cells = (Object[]) evt.getProperty("cells"); + if (cells != null && cells.length > 0) { + for (Object cell : cells) { + if (getModel().isEdge(cell) && "".equals(((mxCell) cell).getValue())) { + mxCell edge = (mxCell) cell; + OWLObjectProperty property = + controller.getSelectionManager().getSelectedOWLObjectProperty(); + String propertyID = null; + try { + propertyID = + controller.getOWLAPIDataExtractor().getOWLEntityRendering(property); + } catch (OWLWorkSpaceNotSetException | OWLEntityNullException ignored) { + + } + if (property != null) { + mxICell source = edge.getSource(); + mxICell target = edge.getTarget(); + + JTextField quantifierField = new JTextField(10); + JTextField valueField = new JTextField(10); + JPanel restrictionPanel = new JPanel(); + restrictionPanel.add(new JLabel("Quantifier:")); + restrictionPanel.add(quantifierField); + restrictionPanel.add(Box.createHorizontalStrut(15)); + restrictionPanel.add(new JLabel("Value:")); + restrictionPanel.add(valueField); + + String quantifier = ""; + String value = ""; + int result = + JOptionPane.showConfirmDialog( + null, + restrictionPanel, + "Restriction options", + JOptionPane.DEFAULT_OPTION); + if (result == JOptionPane.OK_OPTION) { + quantifier = quantifierField.getText(); + value = valueField.getText(); + } + + addTriple( + (AnnotationNode) source, + (AnnotationNode) target, + null, + controller.getSelectionManager().getActiveProfile(), + property, + propertyID, + quantifier, + value); + } + + getModel().remove(edge); + } + } + + reDrawGraph(); + } + }); + + addListener(mxEvent.MOVE_CELLS, (sender, evt) -> reDrawGraph()); + + addListener(mxEvent.REMOVE_CELLS, (sender, evt) -> reDrawGraph()); + + getSelectionModel() + .addListener( + mxEvent.CHANGE, + (sender, evt) -> { + Collection selectedCells = (Collection) evt.getProperty("removed"); + Collection deselectedCells = (Collection) evt.getProperty("added"); + if (deselectedCells != null && deselectedCells.size() > 0) { + for (Object cell : deselectedCells) { + setCellStyles(mxConstants.STYLE_STROKEWIDTH, "0", new Object[] {cell}); + } + // Arrays.stream(graph.getChildVertices(graph.getDefaultParent())) + // .forEach( + // cell -> + // graph.setCellStyles( + // mxConstants.STYLE_STROKEWIDTH, "0", new Object[] + // {cell})); + reDrawGraph(); + } + + if (selectedCells != null && selectedCells.size() > 0) { + for (Object cell : selectedCells) { + if (cell instanceof AnnotationNode) { + Annotation annotation = ((AnnotationNode) cell).getAnnotation(); + + controller.getSelectionManager().setSelectedAnnotation(annotation, null); + + setCellStyles(mxConstants.STYLE_STROKEWIDTH, "4", new Object[] {cell}); + + } else if (cell instanceof Triple) { + OWLObjectProperty value = ((Triple) cell).getProperty(); + + controller + .getSelectionManager() + .setSelectedOWLObjectProperty(value); + } + } + reDrawGraph(); + } + }); + areListenersSet = true; + } + } + + private void setVertexStyle(AnnotationNode vertex) { + mxGeometry g = vertex.getGeometry(); + g.setHeight(g.getHeight() + 200); + g.setWidth(g.getWidth() + 200); + + String color = + Integer.toHexString( + controller + .getSelectionManager() + .getActiveProfile() + .getColor(vertex.getAnnotation()) + .getRGB()) + .substring(2); + String shape = mxConstants.SHAPE_RECTANGLE; + + setCellStyles(mxConstants.STYLE_SHAPE, shape, new Object[] {vertex}); + setCellStyles(mxConstants.STYLE_FILLCOLOR, color, new Object[] {vertex}); + } + + /* + GETTERS, CHECKERS, SETTERS + */ + + public AnnotationNode containsVertexCorrespondingToAnnotation(Annotation selectedAnnotation) { + for (Object o : getChildVertices(getDefaultParent())) { + if (o instanceof AnnotationNode + && ((AnnotationNode) o).getAnnotation().equals(selectedAnnotation)) { + return (AnnotationNode) o; + } + } + return null; + } + + public List getVerticesForAnnotation(Annotation annotation) { + return Arrays.stream(getChildVertices(getDefaultParent())) + .filter( + o -> + o instanceof AnnotationNode + && annotation.equals(((AnnotationNode) o).getAnnotation())) + .collect(Collectors.toList()); + } + + @Override + public TextSource getTextSource() { + return textSource; + } + + @Override + public String toString() { + return id; + } + + public int getGraphTextStart() { + return graphTextStart; + } + + public int getGraphTextEnd() { + return graphTextEnd; + } + + public void setGraphText(int start, int end) { + graphTextStart = start; + graphTextEnd = end; + + listeners.forEach(listener -> listener.graphTextChanged(textSource, start, end)); + } + + @Override + public String getId() { + return id; + } + + @Override + public void setId(String id) { + this.id = id; + } + + @Override + public void selectedAnnotationChanged(AnnotationChangeEvent e) { + if (e.getNew() != null) { + setSelectionCells(getVerticesForAnnotation(e.getNew())); + } else { + setSelectionCell(null); + } + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/KnowtatorObject.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/KnowtatorObject.java index 55177745..8a09bf38 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/KnowtatorObject.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/KnowtatorObject.java @@ -1,10 +1,10 @@ -package edu.ucdenver.ccp.knowtator.model; - -public interface KnowtatorObject { - - String getId(); - - void setId(String id); - - TextSource getTextSource(); -} +package edu.ucdenver.ccp.knowtator.model; + +public interface KnowtatorObject { + + String getId(); + + void setId(String id); + + TextSource getTextSource(); +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/Profile.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/Profile.java index 627bb1e4..f10d5e9f 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/Profile.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/Profile.java @@ -1,169 +1,169 @@ -package edu.ucdenver.ccp.knowtator.model; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLAttributes; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLTags; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLUtil; -import edu.ucdenver.ccp.knowtator.model.owl.OWLEntityNullException; -import edu.ucdenver.ccp.knowtator.model.owl.OWLWorkSpaceNotSetException; -import org.apache.log4j.LogManager; -import org.apache.log4j.Logger; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLEntity; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -import java.awt.*; -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class Profile implements Savable, KnowtatorObject { - @SuppressWarnings("unused") - private static Logger log = LogManager.getLogger(Profile.class); - - private String id; - private HashMap colors; // - private KnowtatorController controller; - - public Profile(KnowtatorController controller, String id) { - colors = new HashMap<>(); - this.controller = controller; - controller.verifyId(id, this, false); - } - - public static int compare(Profile profile1, Profile profile2) { - if (profile1 == profile2) { - return 0; - } - if (profile2 == null) { - return 1; - } - if (profile1 == null) { - return -1; - } - return profile1.getId().toLowerCase().compareTo(profile2.getId().toLowerCase()); - } - - @Override - public String getId() { - return id; - } - - @Override - public void setId(String id) { - this.id = id; - } - - @Override - public TextSource getTextSource() { - return null; - } - - private void addColor(String classID, String color) { - Color c = Color.decode(color); - c = - new Color( - (float) c.getRed() / 255, (float) c.getGreen() / 255, (float) c.getBlue() / 255, 1f); - - colors.put(classID, c); - controller.getProfileManager().fireColorChanged(); - } - - public void addColor(Object owlClass, Color c) { - colors.put(owlClass, c); - controller.getProfileManager().fireColorChanged(); - } - - public String toString() { - return id; - } - - @Override - public void writeToKnowtatorXML(Document dom, Element root) { - Element profileElem = dom.createElement(KnowtatorXMLTags.PROFILE); - profileElem.setAttribute(KnowtatorXMLAttributes.ID, id); - colors.forEach( - (owlEntity, c) -> { - Element e = dom.createElement(KnowtatorXMLTags.HIGHLIGHTER); - try { - if (owlEntity instanceof OWLEntity) { - e.setAttribute( - KnowtatorXMLAttributes.CLASS_ID, - controller - .getOWLAPIDataExtractor() - .getOWLEntityRendering((OWLEntity) owlEntity)); - } else if (owlEntity instanceof String) { - e.setAttribute( - KnowtatorXMLAttributes.CLASS_ID, (String) owlEntity); - } - e.setAttribute( - KnowtatorXMLAttributes.COLOR, String.format("#%06x", c.getRGB() & 0x00FFFFFF)); - profileElem.appendChild(e); - - } catch (OWLWorkSpaceNotSetException | OWLEntityNullException ignored) { - - } - }); - root.appendChild(profileElem); - } - - @Override - public void readFromKnowtatorXML(File file, Element parent) { - for (Node highlighterNode : - KnowtatorXMLUtil.asList(parent.getElementsByTagName(KnowtatorXMLTags.HIGHLIGHTER))) { - Element highlighterElement = (Element) highlighterNode; - - String classID = highlighterElement.getAttribute(KnowtatorXMLAttributes.CLASS_ID); - String color = highlighterElement.getAttribute(KnowtatorXMLAttributes.COLOR); - addColor(classID, color); - } - } - - @Override - public void readFromOldKnowtatorXML(File file, Element parent) {} - - @Override - public void readFromBratStandoff( - File file, Map> annotationMap, String content) {} - - @SuppressWarnings("RedundantThrows") - @Override - public void writeToBratStandoff(Writer writer) throws IOException {} - - @Override - public void readFromGeniaXML(Element parent, String content) {} - - @Override - public void writeToGeniaXML(Document dom, Element parent) {} - - public Color getColor(Annotation annotation) { - OWLClass owlClass = annotation.getOwlClass(); - String owlClassID = annotation.getOwlClassID(); - - Color color = colors.get(owlClass); - if (color != null) { - return color; - } else { - color = colors.get(owlClassID); - if (owlClass != null) { - if (color == null) { - color = Color.CYAN; - } - colors.put(owlClass, color); - controller.getProfileManager().fireColorChanged(); - return color; - } else if (color == null) { - colors.put(owlClassID, Color.CYAN); - controller.getProfileManager().fireColorChanged(); - return Color.CYAN; - } else { - return color; - } - } - } -} +package edu.ucdenver.ccp.knowtator.model; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLAttributes; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLTags; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLUtil; +import edu.ucdenver.ccp.knowtator.model.owl.OWLEntityNullException; +import edu.ucdenver.ccp.knowtator.model.owl.OWLWorkSpaceNotSetException; +import org.apache.log4j.LogManager; +import org.apache.log4j.Logger; +import org.semanticweb.owlapi.model.OWLClass; +import org.semanticweb.owlapi.model.OWLEntity; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import java.awt.*; +import java.io.File; +import java.io.IOException; +import java.io.Writer; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Profile implements Savable, KnowtatorObject { + @SuppressWarnings("unused") + private static Logger log = LogManager.getLogger(Profile.class); + + private String id; + private HashMap colors; // + private KnowtatorController controller; + + public Profile(KnowtatorController controller, String id) { + colors = new HashMap<>(); + this.controller = controller; + controller.verifyId(id, this, false); + } + + public static int compare(Profile profile1, Profile profile2) { + if (profile1 == profile2) { + return 0; + } + if (profile2 == null) { + return 1; + } + if (profile1 == null) { + return -1; + } + return profile1.getId().toLowerCase().compareTo(profile2.getId().toLowerCase()); + } + + @Override + public String getId() { + return id; + } + + @Override + public void setId(String id) { + this.id = id; + } + + @Override + public TextSource getTextSource() { + return null; + } + + private void addColor(String classID, String color) { + Color c = Color.decode(color); + c = + new Color( + (float) c.getRed() / 255, (float) c.getGreen() / 255, (float) c.getBlue() / 255, 1f); + + colors.put(classID, c); + controller.getProfileManager().fireColorChanged(); + } + + public void addColor(Object owlClass, Color c) { + colors.put(owlClass, c); + controller.getProfileManager().fireColorChanged(); + } + + public String toString() { + return id; + } + + @Override + public void writeToKnowtatorXML(Document dom, Element root) { + Element profileElem = dom.createElement(KnowtatorXMLTags.PROFILE); + profileElem.setAttribute(KnowtatorXMLAttributes.ID, id); + colors.forEach( + (owlEntity, c) -> { + Element e = dom.createElement(KnowtatorXMLTags.HIGHLIGHTER); + try { + if (owlEntity instanceof OWLEntity) { + e.setAttribute( + KnowtatorXMLAttributes.CLASS_ID, + controller + .getOWLAPIDataExtractor() + .getOWLEntityRendering((OWLEntity) owlEntity)); + } else if (owlEntity instanceof String) { + e.setAttribute( + KnowtatorXMLAttributes.CLASS_ID, (String) owlEntity); + } + e.setAttribute( + KnowtatorXMLAttributes.COLOR, String.format("#%06x", c.getRGB() & 0x00FFFFFF)); + profileElem.appendChild(e); + + } catch (OWLWorkSpaceNotSetException | OWLEntityNullException ignored) { + + } + }); + root.appendChild(profileElem); + } + + @Override + public void readFromKnowtatorXML(File file, Element parent) { + for (Node highlighterNode : + KnowtatorXMLUtil.asList(parent.getElementsByTagName(KnowtatorXMLTags.HIGHLIGHTER))) { + Element highlighterElement = (Element) highlighterNode; + + String classID = highlighterElement.getAttribute(KnowtatorXMLAttributes.CLASS_ID); + String color = highlighterElement.getAttribute(KnowtatorXMLAttributes.COLOR); + addColor(classID, color); + } + } + + @Override + public void readFromOldKnowtatorXML(File file, Element parent) {} + + @Override + public void readFromBratStandoff( + File file, Map> annotationMap, String content) {} + + @SuppressWarnings("RedundantThrows") + @Override + public void writeToBratStandoff(Writer writer) throws IOException {} + + @Override + public void readFromGeniaXML(Element parent, String content) {} + + @Override + public void writeToGeniaXML(Document dom, Element parent) {} + + public Color getColor(Annotation annotation) { + OWLClass owlClass = annotation.getOwlClass(); + String owlClassID = annotation.getOwlClassID(); + + Color color = colors.get(owlClass); + if (color != null) { + return color; + } else { + color = colors.get(owlClassID); + if (owlClass != null) { + if (color == null) { + color = Color.CYAN; + } + colors.put(owlClass, color); + controller.getProfileManager().fireColorChanged(); + return color; + } else if (color == null) { + colors.put(owlClassID, Color.CYAN); + controller.getProfileManager().fireColorChanged(); + return Color.CYAN; + } else { + return color; + } + } + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/ProfileManager.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/ProfileManager.java index 488e6f77..df544de3 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/ProfileManager.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/ProfileManager.java @@ -1,108 +1,108 @@ -package edu.ucdenver.ccp.knowtator.model; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLAttributes; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLTags; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLUtil; -import edu.ucdenver.ccp.knowtator.listeners.ColorListener; -import edu.ucdenver.ccp.knowtator.model.collection.ProfileCollection; -import org.apache.log4j.Logger; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -public class ProfileManager implements Savable { - - private static final Logger log = Logger.getLogger(KnowtatorController.class); - - private ProfileCollection profileCollection; - private KnowtatorController controller; - private List colorListeners; - - public ProfileManager(KnowtatorController controller) { - this.controller = controller; - colorListeners = new ArrayList<>(); - profileCollection = new ProfileCollection(controller); - } - - public void addColorListener(ColorListener listener) { - colorListeners.add(listener); - } - - public Profile addProfile(String profileID) { - Profile newProfile = profileCollection.get(profileID); - if (newProfile == null) { - newProfile = new Profile(controller, profileID); - profileCollection.add(newProfile); - } - controller.getSelectionManager().setSelectedProfile(newProfile); - return newProfile; - } - - private void removeProfile(Profile profile) { - profileCollection.remove(profile); - controller.getSelectionManager().setSelectedProfile(profileCollection.iterator().next()); - } - - public ProfileCollection getProfileCollection() { - return profileCollection; - } - - public void writeToKnowtatorXML(Document dom, Element root) { - profileCollection.forEach(profile -> profile.writeToKnowtatorXML(dom, root)); - } - - @Override - public void readFromKnowtatorXML(File file, Element parent) { - for (Node profileNode : - KnowtatorXMLUtil.asList(parent.getElementsByTagName(KnowtatorXMLTags.PROFILE))) { - Element profileElement = (Element) profileNode; - String profileID = profileElement.getAttribute(KnowtatorXMLAttributes.ID); - - Profile newProfile = addProfile(profileID); - newProfile.readFromKnowtatorXML(null, profileElement); - } - } - - @Override - public void readFromOldKnowtatorXML(File file, Element parent) {} - - @Override - public void readFromBratStandoff( - File file, Map> annotationMap, String content) {} - - @SuppressWarnings("RedundantThrows") - @Override - public void writeToBratStandoff(Writer writer) throws IOException {} - - @Override - public void readFromGeniaXML(Element parent, String content) {} - - @Override - public void writeToGeniaXML(Document dom, Element parent) {} - - Profile getDefaultProfile() { - return profileCollection.getDefaultProfile(); - } - - public void removeActiveProfile() { - if (controller.getSelectionManager().getActiveProfile() != profileCollection.getDefaultProfile()) { - removeProfile(controller.getSelectionManager().getActiveProfile()); - } - } - - Profile getProfile(String profileID) { - return profileCollection.get(profileID); - } - - void fireColorChanged() { - colorListeners.forEach(ColorListener::colorChanged); - } -} +package edu.ucdenver.ccp.knowtator.model; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLAttributes; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLTags; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLUtil; +import edu.ucdenver.ccp.knowtator.listeners.ColorListener; +import edu.ucdenver.ccp.knowtator.model.collection.ProfileCollection; +import org.apache.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import java.io.File; +import java.io.IOException; +import java.io.Writer; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class ProfileManager implements Savable { + + private static final Logger log = Logger.getLogger(KnowtatorController.class); + + private ProfileCollection profileCollection; + private KnowtatorController controller; + private List colorListeners; + + public ProfileManager(KnowtatorController controller) { + this.controller = controller; + colorListeners = new ArrayList<>(); + profileCollection = new ProfileCollection(controller); + } + + public void addColorListener(ColorListener listener) { + colorListeners.add(listener); + } + + public Profile addProfile(String profileID) { + Profile newProfile = profileCollection.get(profileID); + if (newProfile == null) { + newProfile = new Profile(controller, profileID); + profileCollection.add(newProfile); + } + controller.getSelectionManager().setSelectedProfile(newProfile); + return newProfile; + } + + private void removeProfile(Profile profile) { + profileCollection.remove(profile); + controller.getSelectionManager().setSelectedProfile(profileCollection.iterator().next()); + } + + public ProfileCollection getProfileCollection() { + return profileCollection; + } + + public void writeToKnowtatorXML(Document dom, Element root) { + profileCollection.forEach(profile -> profile.writeToKnowtatorXML(dom, root)); + } + + @Override + public void readFromKnowtatorXML(File file, Element parent) { + for (Node profileNode : + KnowtatorXMLUtil.asList(parent.getElementsByTagName(KnowtatorXMLTags.PROFILE))) { + Element profileElement = (Element) profileNode; + String profileID = profileElement.getAttribute(KnowtatorXMLAttributes.ID); + + Profile newProfile = addProfile(profileID); + newProfile.readFromKnowtatorXML(null, profileElement); + } + } + + @Override + public void readFromOldKnowtatorXML(File file, Element parent) {} + + @Override + public void readFromBratStandoff( + File file, Map> annotationMap, String content) {} + + @SuppressWarnings("RedundantThrows") + @Override + public void writeToBratStandoff(Writer writer) throws IOException {} + + @Override + public void readFromGeniaXML(Element parent, String content) {} + + @Override + public void writeToGeniaXML(Document dom, Element parent) {} + + Profile getDefaultProfile() { + return profileCollection.getDefaultProfile(); + } + + public void removeActiveProfile() { + if (controller.getSelectionManager().getActiveProfile() != profileCollection.getDefaultProfile()) { + removeProfile(controller.getSelectionManager().getActiveProfile()); + } + } + + Profile getProfile(String profileID) { + return profileCollection.get(profileID); + } + + void fireColorChanged() { + colorListeners.forEach(ColorListener::colorChanged); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/ProjectManager.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/ProjectManager.java index 80cab6b0..77d3bcec 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/ProjectManager.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/ProjectManager.java @@ -1,212 +1,212 @@ -package edu.ucdenver.ccp.knowtator.model; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.io.BasicIOUtil; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLUtil; -import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; -import edu.ucdenver.ccp.knowtator.model.owl.OWLWorkSpaceNotSetException; -import org.apache.commons.io.FileUtils; -import org.apache.log4j.Logger; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.nio.file.Files; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; -import java.util.prefs.BackingStoreException; - -public class ProjectManager { - private static final Logger log = Logger.getLogger(ProjectManager.class); - private KnowtatorController controller; - private File projectLocation; - private File articlesLocation; - private File ontologiesLocation; - private File annotationsLocation; - private File profilesLocation; - private boolean projectLoaded; - private List listeners; - - public ProjectManager(KnowtatorController controller) { - this.controller = controller; - projectLoaded = false; - listeners = new ArrayList<>(); - } - - public void addListener(ProjectListener listener) { - listeners.add(listener); - } - - public File getProjectLocation() { - return projectLocation; - } - - public File getArticlesLocation() { - return articlesLocation; - } - - public void newProject(File projectDirectory) { - makeFileStructure(projectDirectory); - } - - public void loadProject(File projectFile) { - if (projectFile != null) { - makeFileStructure(projectFile.getParentFile()); - loadProject(); - controller.getPrefs().put("Last Project", projectFile.getAbsolutePath()); - try { - controller.getPrefs().flush(); - } catch (BackingStoreException e) { - e.printStackTrace(); - } - } - } - - public void loadProject( - File profilesLocation, - File ontologiesLocation, - File articlesLocation, - File annotationsLocation) { - makeFileStructure(profilesLocation, ontologiesLocation, articlesLocation, annotationsLocation); - loadProject(); - } - - private void loadProject() { - projectLoaded = false; - listeners.forEach(ProjectListener::projectClosed); - - if (ontologiesLocation != null) { - log.warn("Loading ontologies"); - try { - controller.getOWLAPIDataExtractor().read(ontologiesLocation); - } catch (IOException | OWLWorkSpaceNotSetException e) { - log.warn("Could not load ontologies"); - } - } - - if (profilesLocation != null) { - log.warn("Loading profiles"); - loadFromFormat(KnowtatorXMLUtil.class, controller.getProfileManager(), profilesLocation); - } - - if (annotationsLocation != null) { - log.warn("Loading annotations"); - loadFromFormat( - KnowtatorXMLUtil.class, controller.getTextSourceManager(), annotationsLocation); - } - - projectLoaded = true; - - for (ProjectListener listener : listeners) { - listener.projectLoaded(); - } - } - - /** - * Allows for manual setting of the project structure - */ - private void makeFileStructure( - File profilesLocation, - File ontologiesLocation, - File articlesLocation, - File annotationsLocation) { - this.projectLocation = null; - this.profilesLocation = profilesLocation; - this.ontologiesLocation = ontologiesLocation; - this.articlesLocation = articlesLocation; - this.annotationsLocation = annotationsLocation; - } - - private void makeFileStructure(File projectDirectory) { - try { - projectLocation = projectDirectory; - articlesLocation = new File(projectDirectory, "Articles"); - ontologiesLocation = new File(projectDirectory, "Ontologies"); - annotationsLocation = new File(projectDirectory, "Annotations"); - profilesLocation = new File(projectDirectory, "Profiles"); - - Files.createDirectories(projectDirectory.toPath()); - Files.createDirectories(articlesLocation.toPath()); - Files.createDirectories(ontologiesLocation.toPath()); - Files.createDirectories(annotationsLocation.toPath()); - Files.createDirectories(profilesLocation.toPath()); - if (FileUtils.listFiles(projectDirectory, new String[]{"knowtator"}, false).size() == 0) - Files.createFile( - new File(projectDirectory, projectDirectory.getName() + ".knowtator").toPath()); - } catch (IOException e) { - System.err.println("Cannot create directories - " + e); - } - } - - public void saveProject() { - - if (getProjectLocation() != null) { - //noinspection ResultOfMethodCallIgnored - Arrays.stream(Objects.requireNonNull(profilesLocation.listFiles())).forEach(File::delete); - //noinspection ResultOfMethodCallIgnored - Arrays.stream(Objects.requireNonNull(annotationsLocation.listFiles())).forEach(File::delete); - - this.saveToFormat(KnowtatorXMLUtil.class, controller.getProfileManager(), profilesLocation); - this.saveToFormat(KnowtatorXMLUtil.class, annotationsLocation); - } - } - - public void addDocument(File file) { - if (!file.getParentFile().equals(articlesLocation)) { - try { - FileUtils.copyFile(file, new File(articlesLocation, file.getName())); - } catch (IOException e) { - e.printStackTrace(); - } - } - controller.getTextSourceManager().addTextSource(null, file.getName(), file.getName()); - } - - public File getAnnotationsLocation() { - return annotationsLocation; - } - - public void saveToFormat(Class ioClass, File file) { - saveToFormat(ioClass, controller.getTextSourceManager(), file); - } - - public void saveToFormat(Class ioClass, Savable savable, File file) { - try { - try { - controller.getOWLAPIDataExtractor().setRenderRDFSLabel(); - } catch (OWLWorkSpaceNotSetException ignored) { - } - BasicIOUtil util = ioClass.getDeclaredConstructor().newInstance(); - util.write(savable != null ? savable : controller.getTextSourceManager(), file); - } catch (InstantiationException - | IllegalAccessException - | InvocationTargetException - | NoSuchMethodException - | IOException e) { - e.printStackTrace(); - } - } - - public void loadFromFormat(Class ioClass, File file) { - loadFromFormat(ioClass, controller.getTextSourceManager(), file); - } - - public void loadFromFormat(Class ioClass, Savable savable, File file) { - try { - BasicIOUtil util = ioClass.getDeclaredConstructor().newInstance(); - util.read(savable, file); - } catch (InstantiationException - | IllegalAccessException - | InvocationTargetException - | NoSuchMethodException - | IOException e) { - e.printStackTrace(); - } - } - - public boolean isProjectLoaded() { - return projectLoaded; - } -} +package edu.ucdenver.ccp.knowtator.model; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.io.BasicIOUtil; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLUtil; +import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; +import edu.ucdenver.ccp.knowtator.model.owl.OWLWorkSpaceNotSetException; +import org.apache.commons.io.FileUtils; +import org.apache.log4j.Logger; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.prefs.BackingStoreException; + +public class ProjectManager { + private static final Logger log = Logger.getLogger(ProjectManager.class); + private KnowtatorController controller; + private File projectLocation; + private File articlesLocation; + private File ontologiesLocation; + private File annotationsLocation; + private File profilesLocation; + private boolean projectLoaded; + private List listeners; + + public ProjectManager(KnowtatorController controller) { + this.controller = controller; + projectLoaded = false; + listeners = new ArrayList<>(); + } + + public void addListener(ProjectListener listener) { + listeners.add(listener); + } + + public File getProjectLocation() { + return projectLocation; + } + + public File getArticlesLocation() { + return articlesLocation; + } + + public void newProject(File projectDirectory) { + makeFileStructure(projectDirectory); + } + + public void loadProject(File projectFile) { + if (projectFile != null) { + makeFileStructure(projectFile.getParentFile()); + loadProject(); + controller.getPrefs().put("Last Project", projectFile.getAbsolutePath()); + try { + controller.getPrefs().flush(); + } catch (BackingStoreException e) { + e.printStackTrace(); + } + } + } + + public void loadProject( + File profilesLocation, + File ontologiesLocation, + File articlesLocation, + File annotationsLocation) { + makeFileStructure(profilesLocation, ontologiesLocation, articlesLocation, annotationsLocation); + loadProject(); + } + + private void loadProject() { + projectLoaded = false; + listeners.forEach(ProjectListener::projectClosed); + + if (ontologiesLocation != null) { + log.warn("Loading ontologies"); + try { + controller.getOWLAPIDataExtractor().read(ontologiesLocation); + } catch (IOException | OWLWorkSpaceNotSetException e) { + log.warn("Could not load ontologies"); + } + } + + if (profilesLocation != null) { + log.warn("Loading profiles"); + loadFromFormat(KnowtatorXMLUtil.class, controller.getProfileManager(), profilesLocation); + } + + if (annotationsLocation != null) { + log.warn("Loading annotations"); + loadFromFormat( + KnowtatorXMLUtil.class, controller.getTextSourceManager(), annotationsLocation); + } + + projectLoaded = true; + + for (ProjectListener listener : listeners) { + listener.projectLoaded(); + } + } + + /** + * Allows for manual setting of the project structure + */ + private void makeFileStructure( + File profilesLocation, + File ontologiesLocation, + File articlesLocation, + File annotationsLocation) { + this.projectLocation = null; + this.profilesLocation = profilesLocation; + this.ontologiesLocation = ontologiesLocation; + this.articlesLocation = articlesLocation; + this.annotationsLocation = annotationsLocation; + } + + private void makeFileStructure(File projectDirectory) { + try { + projectLocation = projectDirectory; + articlesLocation = new File(projectDirectory, "Articles"); + ontologiesLocation = new File(projectDirectory, "Ontologies"); + annotationsLocation = new File(projectDirectory, "Annotations"); + profilesLocation = new File(projectDirectory, "Profiles"); + + Files.createDirectories(projectDirectory.toPath()); + Files.createDirectories(articlesLocation.toPath()); + Files.createDirectories(ontologiesLocation.toPath()); + Files.createDirectories(annotationsLocation.toPath()); + Files.createDirectories(profilesLocation.toPath()); + if (FileUtils.listFiles(projectDirectory, new String[]{"knowtator"}, false).size() == 0) + Files.createFile( + new File(projectDirectory, projectDirectory.getName() + ".knowtator").toPath()); + } catch (IOException e) { + System.err.println("Cannot create directories - " + e); + } + } + + public void saveProject() { + + if (getProjectLocation() != null) { + //noinspection ResultOfMethodCallIgnored + Arrays.stream(Objects.requireNonNull(profilesLocation.listFiles())).forEach(File::delete); + //noinspection ResultOfMethodCallIgnored + Arrays.stream(Objects.requireNonNull(annotationsLocation.listFiles())).forEach(File::delete); + + this.saveToFormat(KnowtatorXMLUtil.class, controller.getProfileManager(), profilesLocation); + this.saveToFormat(KnowtatorXMLUtil.class, annotationsLocation); + } + } + + public void addDocument(File file) { + if (!file.getParentFile().equals(articlesLocation)) { + try { + FileUtils.copyFile(file, new File(articlesLocation, file.getName())); + } catch (IOException e) { + e.printStackTrace(); + } + } + controller.getTextSourceManager().addTextSource(null, file.getName(), file.getName()); + } + + public File getAnnotationsLocation() { + return annotationsLocation; + } + + public void saveToFormat(Class ioClass, File file) { + saveToFormat(ioClass, controller.getTextSourceManager(), file); + } + + public void saveToFormat(Class ioClass, Savable savable, File file) { + try { + try { + controller.getOWLAPIDataExtractor().setRenderRDFSLabel(); + } catch (OWLWorkSpaceNotSetException ignored) { + } + BasicIOUtil util = ioClass.getDeclaredConstructor().newInstance(); + util.write(savable != null ? savable : controller.getTextSourceManager(), file); + } catch (InstantiationException + | IllegalAccessException + | InvocationTargetException + | NoSuchMethodException + | IOException e) { + e.printStackTrace(); + } + } + + public void loadFromFormat(Class ioClass, File file) { + loadFromFormat(ioClass, controller.getTextSourceManager(), file); + } + + public void loadFromFormat(Class ioClass, Savable savable, File file) { + try { + BasicIOUtil util = ioClass.getDeclaredConstructor().newInstance(); + util.read(savable, file); + } catch (InstantiationException + | IllegalAccessException + | InvocationTargetException + | NoSuchMethodException + | IOException e) { + e.printStackTrace(); + } + } + + public boolean isProjectLoaded() { + return projectLoaded; + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/Savable.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/Savable.java index fae3727e..2b608945 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/Savable.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/Savable.java @@ -1,28 +1,28 @@ -package edu.ucdenver.ccp.knowtator.model; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import java.io.File; -import java.io.IOException; -import java.io.Serializable; -import java.io.Writer; -import java.util.List; -import java.util.Map; - -public interface Savable extends Serializable { - void writeToKnowtatorXML(Document dom, Element parent); - - void readFromKnowtatorXML(File file, Element parent); - - void readFromOldKnowtatorXML(File file, Element parent); - - void readFromBratStandoff( - File file, Map> annotationMap, String content); - - void writeToBratStandoff(Writer writer) throws IOException; - - void readFromGeniaXML(Element parent, String content); - - void writeToGeniaXML(Document dom, Element parent); -} +package edu.ucdenver.ccp.knowtator.model; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import java.io.File; +import java.io.IOException; +import java.io.Serializable; +import java.io.Writer; +import java.util.List; +import java.util.Map; + +public interface Savable extends Serializable { + void writeToKnowtatorXML(Document dom, Element parent); + + void readFromKnowtatorXML(File file, Element parent); + + void readFromOldKnowtatorXML(File file, Element parent); + + void readFromBratStandoff( + File file, Map> annotationMap, String content); + + void writeToBratStandoff(Writer writer) throws IOException; + + void readFromGeniaXML(Element parent, String content); + + void writeToGeniaXML(Document dom, Element parent); +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/SelectionManager.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/SelectionManager.java index e1bb1c21..bea1125c 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/SelectionManager.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/SelectionManager.java @@ -1,271 +1,271 @@ -package edu.ucdenver.ccp.knowtator.model; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.events.*; -import edu.ucdenver.ccp.knowtator.listeners.*; -import org.apache.log4j.Logger; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLObjectProperty; - -import javax.swing.*; -import javax.swing.event.CaretEvent; -import javax.swing.event.CaretListener; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import java.util.ArrayList; -import java.util.List; - -public class SelectionManager implements CaretListener, ChangeListener, ProjectListener { - - @SuppressWarnings("unused") - private static final Logger log = Logger.getLogger(SelectionManager.class); - private KnowtatorController controller; - private Annotation selectedAnnotation; - private Span selectedSpan; - private GraphSpace activeGraphSpace; - private TextSource activeTextSource; - private Profile activeProfile; - private boolean filterByProfile; - private OWLClass selectedOWLClass; - private int start; - private int end; - private List textSourceListeners; - private List annotationListeners; - private List spanListeners; - private List profileListeners; - private List owlClassListeners; - private List owlObjectPropertyListeners; - private List graphSpaceListeners; - private OWLObjectProperty selectedOWLObjectProperty; - - public SelectionManager(KnowtatorController knowtatorController) { - controller = knowtatorController; - controller.getProjectManager().addListener(this); - filterByProfile = false; - textSourceListeners = new ArrayList<>(); - annotationListeners = new ArrayList<>(); - spanListeners = new ArrayList<>(); - profileListeners = new ArrayList<>(); - owlClassListeners = new ArrayList<>(); - owlObjectPropertyListeners = new ArrayList<>(); - graphSpaceListeners = new ArrayList<>(); - - start = 0; - end = 0; - } - - public int getStart() { - return start; - } - - public void setStart(int start) { - this.start = start; - } - - public Profile getActiveProfile() { - return activeProfile; - } - - public void setSelectedProfile(Profile newProfile) { - ProfileChangeEvent e = new ProfileChangeEvent(this.activeProfile, newProfile); - this.activeProfile = newProfile; - profileListeners.forEach(selectionListener -> selectionListener.activeProfileChange(e)); - } - - public int getEnd() { - return end; - } - - public void setEnd(int end) { - this.end = end; - } - - public Annotation getSelectedAnnotation() { - return selectedAnnotation; - } - - public OWLClass getSelectedOWLClass() { - return selectedOWLClass; - } - - public void setSelectedOWLClass(OWLClass owlClass) { - selectedOWLClass = owlClass; - owlClassListeners.forEach(listener -> listener.owlClassChanged(owlClass)); - } - - boolean isFilterByProfile() { - return filterByProfile; - } - - public TextSource getActiveTextSource() { - return activeTextSource; - } - - public void setSelectedTextSource(TextSource newTextSource) { - if (controller.getProjectManager().isProjectLoaded()) { - TextSourceChangeEvent e = new TextSourceChangeEvent(this.activeTextSource, newTextSource); - this.activeTextSource = newTextSource; - setSelectedAnnotation(null, null); - if (!newTextSource.getAnnotationManager().getGraphSpaceCollection().getCollection().isEmpty()) { - setSelectedGraphSpace( - newTextSource.getAnnotationManager().getGraphSpaceCollection().getCollection().first()); - } - textSourceListeners.forEach(selectionListener -> selectionListener.activeTextSourceChanged(e)); - } - } - - public Span getSelectedSpan() { - return selectedSpan; - } - - public void setSelectedSpan(Span newSpan) { - SpanChangeEvent e = new SpanChangeEvent(selectedSpan, newSpan); - - this.selectedSpan = newSpan; - if (newSpan != null) { - setSelectedAnnotation(newSpan.getAnnotation(), newSpan); - } - - spanListeners.forEach(listener -> listener.selectedSpanChanged(e)); - } - - public GraphSpace getActiveGraphSpace() { - return activeGraphSpace; - } - - public void setSelectedGraphSpace(GraphSpace newGraphSpace) { - if (controller.getProjectManager().isProjectLoaded()) { - if (this.activeGraphSpace != newGraphSpace) { - this.activeGraphSpace = newGraphSpace; - GraphSpaceChangeEvent e = new GraphSpaceChangeEvent(this.activeGraphSpace, newGraphSpace); - graphSpaceListeners.forEach( - selectionListener -> selectionListener.activeGraphSpaceChanged(e)); - } - } - } - - public void setSelectedAnnotation(Annotation newAnnotation, Span newSpan) { - if (controller.getProjectManager().isProjectLoaded()) { - if (selectedAnnotation != newAnnotation) { - AnnotationChangeEvent e = new AnnotationChangeEvent(this.selectedAnnotation, newAnnotation); - selectedAnnotation = newAnnotation; - if (selectedAnnotation != null) { - setSelectedSpan(newSpan); - setSelectedOWLClass(selectedAnnotation.getOwlClass()); - } else if (activeGraphSpace != null) { - activeGraphSpace.setSelectionCell(null); - } - annotationListeners.forEach( - selectionListener -> selectionListener.selectedAnnotationChanged(e)); - } - } - } - - @Override - public void caretUpdate(CaretEvent e) { - setStart(Math.min(e.getDot(), e.getMark())); - setEnd(Math.max(e.getDot(), e.getMark())); - } - - @Override - public void stateChanged(ChangeEvent e) { - filterByProfile = ((JCheckBox) e.getSource()).isSelected(); - } - - public void getNextGraphSpace() { - if (controller.getProjectManager().isProjectLoaded()) { - setSelectedGraphSpace( - activeTextSource - .getAnnotationManager() - .getGraphSpaceCollection() - .getNext(activeGraphSpace)); - } - } - - public void getPreviousGraphSpace() { - if (controller.getProjectManager().isProjectLoaded()) { - setSelectedGraphSpace( - activeTextSource - .getAnnotationManager() - .getGraphSpaceCollection() - .getPrevious(activeGraphSpace)); - } - } - - public void getNextSpan() { - if (controller.getProjectManager().isProjectLoaded()) { - setSelectedSpan( - activeTextSource.getAnnotationManager().getAllSpanCollection().getNext(selectedSpan)); - } - } - - public void getPreviousSpan() { - if (controller.getProjectManager().isProjectLoaded()) { - setSelectedSpan( - activeTextSource.getAnnotationManager().getAllSpanCollection().getPrevious(selectedSpan)); - } - } - - public void getNextTextSource() { - if (controller.getProjectManager().isProjectLoaded()) { - setSelectedTextSource( - controller.getTextSourceManager().getTextSourceCollection().getNext(activeTextSource)); - } - } - - public void getPreviousTextSource() { - if (controller.getProjectManager().isProjectLoaded()) { - setSelectedTextSource( - controller - .getTextSourceManager() - .getTextSourceCollection() - .getPrevious(activeTextSource)); - } - } - - public void setSelectedOWLObjectProperty(OWLObjectProperty owlObjectProperty) { - this.selectedOWLObjectProperty = owlObjectProperty; - owlObjectPropertyListeners.forEach(selectionListener -> selectionListener.owlObjectPropertyChanged(owlObjectProperty)); - } - - @Override - public void projectClosed() { - } - - @Override - public void projectLoaded() { - setSelectedTextSource(controller.getTextSourceManager().getTextSourceCollection().getCollection().first()); - } - - public void addTextSourceListener(TextSourceSelectionListener listener) { - textSourceListeners.add(listener); - } - - public void addProfileListener(ProfileSelectionListener listener) { - profileListeners.add(listener); - } - - public void addAnnotationListener(AnnotationSelectionListener listener) { - annotationListeners.add(listener); - } - - public void addSpanListener(SpanSelectionListener listener) { - spanListeners.add(listener); - } - - public void addGraphSpaceListener(GraphSpaceSelectionListener listener) { - graphSpaceListeners.add(listener); - } - - public void addOWLClassListener(OWLClassSelectionListener listener) { - owlClassListeners.add(listener); - } - - public void addOWLObjectPropertyListener(OWLObjectPropertySelectionListener listener) { - owlObjectPropertyListeners.add(listener); - } - - OWLObjectProperty getSelectedOWLObjectProperty() { - return selectedOWLObjectProperty; - } -} +package edu.ucdenver.ccp.knowtator.model; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.events.*; +import edu.ucdenver.ccp.knowtator.listeners.*; +import org.apache.log4j.Logger; +import org.semanticweb.owlapi.model.OWLClass; +import org.semanticweb.owlapi.model.OWLObjectProperty; + +import javax.swing.*; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.util.ArrayList; +import java.util.List; + +public class SelectionManager implements CaretListener, ChangeListener, ProjectListener { + + @SuppressWarnings("unused") + private static final Logger log = Logger.getLogger(SelectionManager.class); + private KnowtatorController controller; + private Annotation selectedAnnotation; + private Span selectedSpan; + private GraphSpace activeGraphSpace; + private TextSource activeTextSource; + private Profile activeProfile; + private boolean filterByProfile; + private OWLClass selectedOWLClass; + private int start; + private int end; + private List textSourceListeners; + private List annotationListeners; + private List spanListeners; + private List profileListeners; + private List owlClassListeners; + private List owlObjectPropertyListeners; + private List graphSpaceListeners; + private OWLObjectProperty selectedOWLObjectProperty; + + public SelectionManager(KnowtatorController knowtatorController) { + controller = knowtatorController; + controller.getProjectManager().addListener(this); + filterByProfile = false; + textSourceListeners = new ArrayList<>(); + annotationListeners = new ArrayList<>(); + spanListeners = new ArrayList<>(); + profileListeners = new ArrayList<>(); + owlClassListeners = new ArrayList<>(); + owlObjectPropertyListeners = new ArrayList<>(); + graphSpaceListeners = new ArrayList<>(); + + start = 0; + end = 0; + } + + public int getStart() { + return start; + } + + public void setStart(int start) { + this.start = start; + } + + public Profile getActiveProfile() { + return activeProfile; + } + + public void setSelectedProfile(Profile newProfile) { + ProfileChangeEvent e = new ProfileChangeEvent(this.activeProfile, newProfile); + this.activeProfile = newProfile; + profileListeners.forEach(selectionListener -> selectionListener.activeProfileChange(e)); + } + + public int getEnd() { + return end; + } + + public void setEnd(int end) { + this.end = end; + } + + public Annotation getSelectedAnnotation() { + return selectedAnnotation; + } + + public OWLClass getSelectedOWLClass() { + return selectedOWLClass; + } + + public void setSelectedOWLClass(OWLClass owlClass) { + selectedOWLClass = owlClass; + owlClassListeners.forEach(listener -> listener.owlClassChanged(owlClass)); + } + + boolean isFilterByProfile() { + return filterByProfile; + } + + public TextSource getActiveTextSource() { + return activeTextSource; + } + + public void setSelectedTextSource(TextSource newTextSource) { + if (controller.getProjectManager().isProjectLoaded()) { + TextSourceChangeEvent e = new TextSourceChangeEvent(this.activeTextSource, newTextSource); + this.activeTextSource = newTextSource; + setSelectedAnnotation(null, null); + if (!newTextSource.getAnnotationManager().getGraphSpaceCollection().getCollection().isEmpty()) { + setSelectedGraphSpace( + newTextSource.getAnnotationManager().getGraphSpaceCollection().getCollection().first()); + } + textSourceListeners.forEach(selectionListener -> selectionListener.activeTextSourceChanged(e)); + } + } + + public Span getSelectedSpan() { + return selectedSpan; + } + + public void setSelectedSpan(Span newSpan) { + SpanChangeEvent e = new SpanChangeEvent(selectedSpan, newSpan); + + this.selectedSpan = newSpan; + if (newSpan != null) { + setSelectedAnnotation(newSpan.getAnnotation(), newSpan); + } + + spanListeners.forEach(listener -> listener.selectedSpanChanged(e)); + } + + public GraphSpace getActiveGraphSpace() { + return activeGraphSpace; + } + + public void setSelectedGraphSpace(GraphSpace newGraphSpace) { + if (controller.getProjectManager().isProjectLoaded()) { + if (this.activeGraphSpace != newGraphSpace) { + this.activeGraphSpace = newGraphSpace; + GraphSpaceChangeEvent e = new GraphSpaceChangeEvent(this.activeGraphSpace, newGraphSpace); + graphSpaceListeners.forEach( + selectionListener -> selectionListener.activeGraphSpaceChanged(e)); + } + } + } + + public void setSelectedAnnotation(Annotation newAnnotation, Span newSpan) { + if (controller.getProjectManager().isProjectLoaded()) { + if (selectedAnnotation != newAnnotation) { + AnnotationChangeEvent e = new AnnotationChangeEvent(this.selectedAnnotation, newAnnotation); + selectedAnnotation = newAnnotation; + if (selectedAnnotation != null) { + setSelectedSpan(newSpan); + setSelectedOWLClass(selectedAnnotation.getOwlClass()); + } else if (activeGraphSpace != null) { + activeGraphSpace.setSelectionCell(null); + } + annotationListeners.forEach( + selectionListener -> selectionListener.selectedAnnotationChanged(e)); + } + } + } + + @Override + public void caretUpdate(CaretEvent e) { + setStart(Math.min(e.getDot(), e.getMark())); + setEnd(Math.max(e.getDot(), e.getMark())); + } + + @Override + public void stateChanged(ChangeEvent e) { + filterByProfile = ((JCheckBox) e.getSource()).isSelected(); + } + + public void getNextGraphSpace() { + if (controller.getProjectManager().isProjectLoaded()) { + setSelectedGraphSpace( + activeTextSource + .getAnnotationManager() + .getGraphSpaceCollection() + .getNext(activeGraphSpace)); + } + } + + public void getPreviousGraphSpace() { + if (controller.getProjectManager().isProjectLoaded()) { + setSelectedGraphSpace( + activeTextSource + .getAnnotationManager() + .getGraphSpaceCollection() + .getPrevious(activeGraphSpace)); + } + } + + public void getNextSpan() { + if (controller.getProjectManager().isProjectLoaded()) { + setSelectedSpan( + activeTextSource.getAnnotationManager().getAllSpanCollection().getNext(selectedSpan)); + } + } + + public void getPreviousSpan() { + if (controller.getProjectManager().isProjectLoaded()) { + setSelectedSpan( + activeTextSource.getAnnotationManager().getAllSpanCollection().getPrevious(selectedSpan)); + } + } + + public void getNextTextSource() { + if (controller.getProjectManager().isProjectLoaded()) { + setSelectedTextSource( + controller.getTextSourceManager().getTextSourceCollection().getNext(activeTextSource)); + } + } + + public void getPreviousTextSource() { + if (controller.getProjectManager().isProjectLoaded()) { + setSelectedTextSource( + controller + .getTextSourceManager() + .getTextSourceCollection() + .getPrevious(activeTextSource)); + } + } + + public void setSelectedOWLObjectProperty(OWLObjectProperty owlObjectProperty) { + this.selectedOWLObjectProperty = owlObjectProperty; + owlObjectPropertyListeners.forEach(selectionListener -> selectionListener.owlObjectPropertyChanged(owlObjectProperty)); + } + + @Override + public void projectClosed() { + } + + @Override + public void projectLoaded() { + setSelectedTextSource(controller.getTextSourceManager().getTextSourceCollection().getCollection().first()); + } + + public void addTextSourceListener(TextSourceSelectionListener listener) { + textSourceListeners.add(listener); + } + + public void addProfileListener(ProfileSelectionListener listener) { + profileListeners.add(listener); + } + + public void addAnnotationListener(AnnotationSelectionListener listener) { + annotationListeners.add(listener); + } + + public void addSpanListener(SpanSelectionListener listener) { + spanListeners.add(listener); + } + + public void addGraphSpaceListener(GraphSpaceSelectionListener listener) { + graphSpaceListeners.add(listener); + } + + public void addOWLClassListener(OWLClassSelectionListener listener) { + owlClassListeners.add(listener); + } + + public void addOWLObjectPropertyListener(OWLObjectPropertySelectionListener listener) { + owlObjectPropertyListeners.add(listener); + } + + OWLObjectProperty getSelectedOWLObjectProperty() { + return selectedOWLObjectProperty; + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/Span.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/Span.java index de977098..9e01a0e4 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/Span.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/Span.java @@ -1,311 +1,311 @@ -package edu.ucdenver.ccp.knowtator.model; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLAttributes; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLTags; -import org.apache.log4j.Logger; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.*; - -public class Span implements Savable, KnowtatorObject { - @SuppressWarnings("unused") - private static Logger log = Logger.getLogger(KnowtatorController.class); - - private int start; - - private int end; - private Annotation annotation; - private String spannedText; - private String id; - private TextSource textSource; - - public Span( - String id, int start, int end, TextSource textSource, KnowtatorController controller) { - - this.textSource = textSource; - this.start = start; - this.end = end; - - controller.verifyId(id, this, false); - - if (start > end) { - throw new IndexOutOfBoundsException( - "Span is invalid because the start of the Span is greater than the end of it: start=" - + start - + " end=" - + end); - } - if (start < 0) { - throw new IndexOutOfBoundsException( - "Span is invalid because the start of the Span is less than zero: start=" + start); - } - this.spannedText = textSource.getContent().substring(start, end); - } - - public Span(int start, int end) { - this.start = start; - this.end = end; - if (start > end) { - throw new IndexOutOfBoundsException( - "Span is invalid because the start of the Span is greater than the end of it: start=" - + start - + " end=" - + end); - } - if (start < 0) { - throw new IndexOutOfBoundsException( - "Span is invalid because the start of the Span is less than zero: start=" + start); - } - } - - public static boolean intersects(TreeSet spans1, TreeSet spans2) { - for (Span span1 : spans1) { - for (Span span2 : spans2) { - if (span1.intersects(span2)) return true; - } - } - return false; - } - - /** - * This method assumes that the both lists of spans are sorted the same way and that a Span in one - * list at the same index as a Span in the other list should be the same. - * - * @param spans1 sorted list of c - * @param spans2 sorted list of spans - * @return true if the two lists of spans are the same. - */ - public static boolean spansMatch(TreeSet spans1, TreeSet spans2) { - if (spans1.size() == spans2.size()) { - Iterator spans1Iterator = spans1.iterator(), spans2Iterator = spans2.iterator(); - while (spans1Iterator.hasNext()) { - if (!spans1Iterator.next().equalStartAndEnd(spans2Iterator.next())) { - return false; - } - } - return true; - } - return false; - } - - public static String substring(String string, Span span) { - int start = Math.max(0, span.getStart()); - start = Math.min(start, string.length() - 1); - int end = Math.max(0, span.getEnd()); - end = Math.min(end, string.length() - 1); - return string.substring(start, end); - } - - // public static int compare(Span span1, Span span2) { - // if (span1 == span2) { - // return 0; - // } - // - // int compare = span1.getStart().compareTo(span2.getStart()); - // if (compare == 0) { - // compare = span1.getEnd().compareTo(span2.getEnd()); - // } - // if (compare == 0) { - // return -1; - // } - // return compare; - // } - - public int compare(Span span2) { - if (span2 == null) { - return 1; - } - int compare = getStart().compareTo(span2.getStart()); - if (compare == 0) { - compare = getEnd().compareTo(span2.getEnd()); - } - if (compare == 0) { - if (!equals(span2)) { - compare = 1; - } - } - return compare; - } - - public boolean equalStartAndEnd(Object object) { - if (!(object instanceof Span)) { - return false; - } - Span span = (Span) object; - return Objects.equals(getStart(), span.getStart()) && Objects.equals(getEnd(), span.getEnd()); - } - - public int hashCode() { - return ((this.start << 16) | (0x0000FFFF | this.end)); - } - - private boolean contains(Span span) { - return (getStart() <= span.getStart() && span.getEnd() <= getEnd()); - } - - public boolean contains(int i) { - return (getStart() <= i && i < getEnd()); - } - - /** we need some junit tests */ - public boolean intersects(Span span) { - int spanStart = span.getStart(); - // either Span's start is in this or this' start is in Span - return this.contains(span) - || span.contains(this) - || (getStart() <= spanStart && spanStart < getEnd() - || spanStart <= getStart() && getStart() < span.getEnd()); - } - - void shrinkEnd() { - if (end > start) end -= 1; - } - - void shrinkStart() { - if (start < end) start += 1; - } - - void growEnd(int limit) { - if (end < limit) end += 1; - } - - void growStart() { - if (start > 0) start -= 1; - } - - public String toString() { - return String.format("Start: %d, End: %d", start, end); - } - - public Annotation getAnnotation() { - return annotation; - } - - public void setAnnotation(Annotation annotation) { - this.annotation = annotation; - } - - public String getSpannedText() { - return spannedText; - } - - public Integer getStart() { - return start; - } - - public Integer getEnd() { - return end; - } - - public int getSize() { - return getEnd() - getStart(); - } - - public void writeToKnowtatorXML(Document dom, Element annotationElem) { - Element spanElement = dom.createElement(KnowtatorXMLTags.SPAN); - spanElement.setAttribute(KnowtatorXMLAttributes.SPAN_START, String.valueOf(start)); - spanElement.setAttribute(KnowtatorXMLAttributes.SPAN_END, String.valueOf(end)); - spanElement.setAttribute(KnowtatorXMLAttributes.ID, id); - spanElement.setTextContent(getSpannedText()); - annotationElem.appendChild(spanElement); - } - - @Override - public void readFromKnowtatorXML(File file, Element parent) {} - - @Override - public void readFromOldKnowtatorXML(File file, Element parent) {} - - @Override - public void readFromBratStandoff( - File file, Map> annotationMap, String content) {} - - @Override - public void writeToBratStandoff(Writer writer) throws IOException { - writer.append(String.format("%d %d", start, end)); - } - - @Override - public void readFromGeniaXML(Element parent, String content) {} - - @Override - public void writeToGeniaXML(Document dom, Element parent) {} - - @Override - public String getId() { - return id; - } - - @Override - public void setId(String id) { - this.id = id; - } - - @Override - public TextSource getTextSource() { - return textSource; - } - - // public static Span shortest(List spans) { - // if (spans.size() == 0) - // return null; - // if (spans.size() == 1) - // return spans.get(0); - // - // Span shortestSpan = spans.get(0); - // int shortestSize = shortestSpan.getSize(); - // for (int i = 1; i < spans.size(); i++) { - // if (spans.get(i).getSize() < shortestSize) { - // shortestSpan = spans.get(i); - // shortestSize = shortestSpan.getSize(); - // } - // } - // - // return shortestSpan; - // } - - // public int compareTo(Span span) { - // if (getStart() < span.getStart()) { - // return -1; - // } else if (getStart() == span.getStart()) { - // return Integer.compare(span.getEnd(), getEnd()); - // } else { - // return 1; - // } - // } - - // public boolean crosses(Span span) { - // int spanStart = span.getStart(); - // - // // either s's start is in this or this' start is in s - // return !this.contains(span) - // && !span.contains(this) - // && (getStart() <= spanStart && spanStart < getEnd() || spanStart <= getStart() - // && getStart() < span.getEnd()); - // } - - // public boolean lessThan(Span span) { - // return getStart() < span.getStart() && getEnd() < span.getEnd(); - // } - - // public boolean greaterThan(Span span) { - // return getStart() > span.getStart() && getEnd() > span.getEnd(); - // } - - // public static Span parseSpan(String spanString) { - // String startString = spanString.substring(0, spanString.indexOf("|")); - // String endString = spanString.substring(spanString.indexOf("|") + 1); - // int start = Integer.parseInt(startString); - // int end = Integer.parseInt(endString); - // return new Span(start, end); - // } - - // public static boolean isValid(int start, int end) { - // return start <= end && start >= 0; - // } -} +package edu.ucdenver.ccp.knowtator.model; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLAttributes; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLTags; +import org.apache.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import java.io.File; +import java.io.IOException; +import java.io.Writer; +import java.util.*; + +public class Span implements Savable, KnowtatorObject { + @SuppressWarnings("unused") + private static Logger log = Logger.getLogger(KnowtatorController.class); + + private int start; + + private int end; + private Annotation annotation; + private String spannedText; + private String id; + private TextSource textSource; + + public Span( + String id, int start, int end, TextSource textSource, KnowtatorController controller) { + + this.textSource = textSource; + this.start = start; + this.end = end; + + controller.verifyId(id, this, false); + + if (start > end) { + throw new IndexOutOfBoundsException( + "Span is invalid because the start of the Span is greater than the end of it: start=" + + start + + " end=" + + end); + } + if (start < 0) { + throw new IndexOutOfBoundsException( + "Span is invalid because the start of the Span is less than zero: start=" + start); + } + this.spannedText = textSource.getContent().substring(start, end); + } + + public Span(int start, int end) { + this.start = start; + this.end = end; + if (start > end) { + throw new IndexOutOfBoundsException( + "Span is invalid because the start of the Span is greater than the end of it: start=" + + start + + " end=" + + end); + } + if (start < 0) { + throw new IndexOutOfBoundsException( + "Span is invalid because the start of the Span is less than zero: start=" + start); + } + } + + public static boolean intersects(TreeSet spans1, TreeSet spans2) { + for (Span span1 : spans1) { + for (Span span2 : spans2) { + if (span1.intersects(span2)) return true; + } + } + return false; + } + + /** + * This method assumes that the both lists of spans are sorted the same way and that a Span in one + * list at the same index as a Span in the other list should be the same. + * + * @param spans1 sorted list of c + * @param spans2 sorted list of spans + * @return true if the two lists of spans are the same. + */ + public static boolean spansMatch(TreeSet spans1, TreeSet spans2) { + if (spans1.size() == spans2.size()) { + Iterator spans1Iterator = spans1.iterator(), spans2Iterator = spans2.iterator(); + while (spans1Iterator.hasNext()) { + if (!spans1Iterator.next().equalStartAndEnd(spans2Iterator.next())) { + return false; + } + } + return true; + } + return false; + } + + public static String substring(String string, Span span) { + int start = Math.max(0, span.getStart()); + start = Math.min(start, string.length() - 1); + int end = Math.max(0, span.getEnd()); + end = Math.min(end, string.length() - 1); + return string.substring(start, end); + } + + // public static int compare(Span span1, Span span2) { + // if (span1 == span2) { + // return 0; + // } + // + // int compare = span1.getStart().compareTo(span2.getStart()); + // if (compare == 0) { + // compare = span1.getEnd().compareTo(span2.getEnd()); + // } + // if (compare == 0) { + // return -1; + // } + // return compare; + // } + + public int compare(Span span2) { + if (span2 == null) { + return 1; + } + int compare = getStart().compareTo(span2.getStart()); + if (compare == 0) { + compare = getEnd().compareTo(span2.getEnd()); + } + if (compare == 0) { + if (!equals(span2)) { + compare = 1; + } + } + return compare; + } + + public boolean equalStartAndEnd(Object object) { + if (!(object instanceof Span)) { + return false; + } + Span span = (Span) object; + return Objects.equals(getStart(), span.getStart()) && Objects.equals(getEnd(), span.getEnd()); + } + + public int hashCode() { + return ((this.start << 16) | (0x0000FFFF | this.end)); + } + + private boolean contains(Span span) { + return (getStart() <= span.getStart() && span.getEnd() <= getEnd()); + } + + public boolean contains(int i) { + return (getStart() <= i && i < getEnd()); + } + + /** we need some junit tests */ + public boolean intersects(Span span) { + int spanStart = span.getStart(); + // either Span's start is in this or this' start is in Span + return this.contains(span) + || span.contains(this) + || (getStart() <= spanStart && spanStart < getEnd() + || spanStart <= getStart() && getStart() < span.getEnd()); + } + + void shrinkEnd() { + if (end > start) end -= 1; + } + + void shrinkStart() { + if (start < end) start += 1; + } + + void growEnd(int limit) { + if (end < limit) end += 1; + } + + void growStart() { + if (start > 0) start -= 1; + } + + public String toString() { + return String.format("Start: %d, End: %d", start, end); + } + + public Annotation getAnnotation() { + return annotation; + } + + public void setAnnotation(Annotation annotation) { + this.annotation = annotation; + } + + public String getSpannedText() { + return spannedText; + } + + public Integer getStart() { + return start; + } + + public Integer getEnd() { + return end; + } + + public int getSize() { + return getEnd() - getStart(); + } + + public void writeToKnowtatorXML(Document dom, Element annotationElem) { + Element spanElement = dom.createElement(KnowtatorXMLTags.SPAN); + spanElement.setAttribute(KnowtatorXMLAttributes.SPAN_START, String.valueOf(start)); + spanElement.setAttribute(KnowtatorXMLAttributes.SPAN_END, String.valueOf(end)); + spanElement.setAttribute(KnowtatorXMLAttributes.ID, id); + spanElement.setTextContent(getSpannedText()); + annotationElem.appendChild(spanElement); + } + + @Override + public void readFromKnowtatorXML(File file, Element parent) {} + + @Override + public void readFromOldKnowtatorXML(File file, Element parent) {} + + @Override + public void readFromBratStandoff( + File file, Map> annotationMap, String content) {} + + @Override + public void writeToBratStandoff(Writer writer) throws IOException { + writer.append(String.format("%d %d", start, end)); + } + + @Override + public void readFromGeniaXML(Element parent, String content) {} + + @Override + public void writeToGeniaXML(Document dom, Element parent) {} + + @Override + public String getId() { + return id; + } + + @Override + public void setId(String id) { + this.id = id; + } + + @Override + public TextSource getTextSource() { + return textSource; + } + + // public static Span shortest(List spans) { + // if (spans.size() == 0) + // return null; + // if (spans.size() == 1) + // return spans.get(0); + // + // Span shortestSpan = spans.get(0); + // int shortestSize = shortestSpan.getSize(); + // for (int i = 1; i < spans.size(); i++) { + // if (spans.get(i).getSize() < shortestSize) { + // shortestSpan = spans.get(i); + // shortestSize = shortestSpan.getSize(); + // } + // } + // + // return shortestSpan; + // } + + // public int compareTo(Span span) { + // if (getStart() < span.getStart()) { + // return -1; + // } else if (getStart() == span.getStart()) { + // return Integer.compare(span.getEnd(), getEnd()); + // } else { + // return 1; + // } + // } + + // public boolean crosses(Span span) { + // int spanStart = span.getStart(); + // + // // either s's start is in this or this' start is in s + // return !this.contains(span) + // && !span.contains(this) + // && (getStart() <= spanStart && spanStart < getEnd() || spanStart <= getStart() + // && getStart() < span.getEnd()); + // } + + // public boolean lessThan(Span span) { + // return getStart() < span.getStart() && getEnd() < span.getEnd(); + // } + + // public boolean greaterThan(Span span) { + // return getStart() > span.getStart() && getEnd() > span.getEnd(); + // } + + // public static Span parseSpan(String spanString) { + // String startString = spanString.substring(0, spanString.indexOf("|")); + // String endString = spanString.substring(spanString.indexOf("|") + 1); + // int start = Integer.parseInt(startString); + // int end = Integer.parseInt(endString); + // return new Span(start, end); + // } + + // public static boolean isValid(int start, int end) { + // return start <= end && start >= 0; + // } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/TextSource.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/TextSource.java index dc09901e..5e285f0e 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/TextSource.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/TextSource.java @@ -1,186 +1,186 @@ -package edu.ucdenver.ccp.knowtator.model; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLAttributes; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLTags; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.FilenameUtils; -import org.apache.log4j.LogManager; -import org.apache.log4j.Logger; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import javax.swing.*; -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.List; -import java.util.Map; - -public class TextSource implements Savable, KnowtatorObject { - @SuppressWarnings("unused") - private static Logger log = LogManager.getLogger(TextSource.class); - - private final KnowtatorController controller; - private final File saveFile; - private AnnotationManager annotationManager; - private String id; - private File textFile; - private String content; - - public TextSource(KnowtatorController controller, File saveFile, String textFileName) { - this.controller = controller; - this.saveFile = saveFile; - this.annotationManager = new AnnotationManager(controller, this); - - controller.verifyId(FilenameUtils.getBaseName(textFileName), this, true); - - textFile = - new File( - controller.getProjectManager().getArticlesLocation(), - textFileName.endsWith(".txt") ? textFileName : textFileName + ".txt"); - - if (!textFile.exists()) { - if (JOptionPane.showConfirmDialog( - null, - String.format("Could not find file for %s. Choose file location?", id), - "File not found", - JOptionPane.YES_NO_OPTION) - == JOptionPane.YES_OPTION) { - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setDialogTitle("Select text file for " + id); - - if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { - File file = fileChooser.getSelectedFile(); - if (JOptionPane.showConfirmDialog( - null, - String.format("Copy %s to project?", textFile.getName()), - "Copy selected file?", - JOptionPane.YES_NO_OPTION) - == JOptionPane.YES_OPTION) { - try { - textFile = - Files.copy( - Paths.get(file.toURI()), - Paths.get( - controller - .getProjectManager() - .getArticlesLocation() - .toURI() - .resolve(file.getName()))) - .toFile(); - } catch (IOException e) { - e.printStackTrace(); - } - } else { - textFile = file; - } - } - } - } - } - - public static int compare(TextSource textSource1, TextSource textSource2) { - if (textSource1 == textSource2) { - return 0; - } - if (textSource2 == null) { - return 1; - } - if (textSource1 == null) { - return -1; - } - return textSource1.getId().toLowerCase().compareTo(textSource2.getId().toLowerCase()); - } - - public File getSaveFile() { - return saveFile; - } - - public File getTextFile() { - return textFile; - } - - public AnnotationManager getAnnotationManager() { - return annotationManager; - } - - @Override - public String getId() { - return id; - } - - @Override - public void setId(String id) { - this.id = id; - } - - @Override - public TextSource getTextSource() { - return null; - } - - @Override - public String toString() { - return id; - } - - @Override - public void readFromKnowtatorXML(File file, Element parent) { - annotationManager.readFromKnowtatorXML(null, parent); - } - - @Override - public void writeToKnowtatorXML(Document dom, Element parent) { - Element textSourceElement = dom.createElement(KnowtatorXMLTags.DOCUMENT); - parent.appendChild(textSourceElement); - textSourceElement.setAttribute(KnowtatorXMLAttributes.ID, id); - textSourceElement.setAttribute(KnowtatorXMLAttributes.FILE, textFile.getName()); - annotationManager.writeToKnowtatorXML(dom, textSourceElement); - } - - @Override - public void readFromOldKnowtatorXML(File file, Element parent) { - annotationManager.readFromOldKnowtatorXML(null, parent); - } - - @Override - public void readFromBratStandoff( - File file, Map> annotationMap, String content) { - annotationManager.readFromBratStandoff(null, annotationMap, getContent()); - } - - @Override - public void writeToBratStandoff(Writer writer) throws IOException { - annotationManager.writeToBratStandoff(writer); - } - - @Override - public void readFromGeniaXML(Element parent, String content) {} - - public String getContent() { - if (content == null) { - while (true) { - try { - content = FileUtils.readFileToString(textFile, "UTF-8"); - return content; - } catch (IOException e) { - textFile = new File(controller.getProjectManager().getArticlesLocation(), id + ".txt"); - while (!textFile.exists()) { - JFileChooser fileChooser = new JFileChooser(); - if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { - textFile = fileChooser.getSelectedFile(); - } - } - } - } - } else { - return content; - } - } - - @Override - public void writeToGeniaXML(Document dom, Element parent) {} -} +package edu.ucdenver.ccp.knowtator.model; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLAttributes; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLTags; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.apache.log4j.LogManager; +import org.apache.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import javax.swing.*; +import java.io.File; +import java.io.IOException; +import java.io.Writer; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; +import java.util.Map; + +public class TextSource implements Savable, KnowtatorObject { + @SuppressWarnings("unused") + private static Logger log = LogManager.getLogger(TextSource.class); + + private final KnowtatorController controller; + private final File saveFile; + private AnnotationManager annotationManager; + private String id; + private File textFile; + private String content; + + public TextSource(KnowtatorController controller, File saveFile, String textFileName) { + this.controller = controller; + this.saveFile = saveFile; + this.annotationManager = new AnnotationManager(controller, this); + + controller.verifyId(FilenameUtils.getBaseName(textFileName), this, true); + + textFile = + new File( + controller.getProjectManager().getArticlesLocation(), + textFileName.endsWith(".txt") ? textFileName : textFileName + ".txt"); + + if (!textFile.exists()) { + if (JOptionPane.showConfirmDialog( + null, + String.format("Could not find file for %s. Choose file location?", id), + "File not found", + JOptionPane.YES_NO_OPTION) + == JOptionPane.YES_OPTION) { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setDialogTitle("Select text file for " + id); + + if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { + File file = fileChooser.getSelectedFile(); + if (JOptionPane.showConfirmDialog( + null, + String.format("Copy %s to project?", textFile.getName()), + "Copy selected file?", + JOptionPane.YES_NO_OPTION) + == JOptionPane.YES_OPTION) { + try { + textFile = + Files.copy( + Paths.get(file.toURI()), + Paths.get( + controller + .getProjectManager() + .getArticlesLocation() + .toURI() + .resolve(file.getName()))) + .toFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + textFile = file; + } + } + } + } + } + + public static int compare(TextSource textSource1, TextSource textSource2) { + if (textSource1 == textSource2) { + return 0; + } + if (textSource2 == null) { + return 1; + } + if (textSource1 == null) { + return -1; + } + return textSource1.getId().toLowerCase().compareTo(textSource2.getId().toLowerCase()); + } + + public File getSaveFile() { + return saveFile; + } + + public File getTextFile() { + return textFile; + } + + public AnnotationManager getAnnotationManager() { + return annotationManager; + } + + @Override + public String getId() { + return id; + } + + @Override + public void setId(String id) { + this.id = id; + } + + @Override + public TextSource getTextSource() { + return null; + } + + @Override + public String toString() { + return id; + } + + @Override + public void readFromKnowtatorXML(File file, Element parent) { + annotationManager.readFromKnowtatorXML(null, parent); + } + + @Override + public void writeToKnowtatorXML(Document dom, Element parent) { + Element textSourceElement = dom.createElement(KnowtatorXMLTags.DOCUMENT); + parent.appendChild(textSourceElement); + textSourceElement.setAttribute(KnowtatorXMLAttributes.ID, id); + textSourceElement.setAttribute(KnowtatorXMLAttributes.FILE, textFile.getName()); + annotationManager.writeToKnowtatorXML(dom, textSourceElement); + } + + @Override + public void readFromOldKnowtatorXML(File file, Element parent) { + annotationManager.readFromOldKnowtatorXML(null, parent); + } + + @Override + public void readFromBratStandoff( + File file, Map> annotationMap, String content) { + annotationManager.readFromBratStandoff(null, annotationMap, getContent()); + } + + @Override + public void writeToBratStandoff(Writer writer) throws IOException { + annotationManager.writeToBratStandoff(writer); + } + + @Override + public void readFromGeniaXML(Element parent, String content) {} + + public String getContent() { + if (content == null) { + while (true) { + try { + content = FileUtils.readFileToString(textFile, "UTF-8"); + return content; + } catch (IOException e) { + textFile = new File(controller.getProjectManager().getArticlesLocation(), id + ".txt"); + while (!textFile.exists()) { + JFileChooser fileChooser = new JFileChooser(); + if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { + textFile = fileChooser.getSelectedFile(); + } + } + } + } + } else { + return content; + } + } + + @Override + public void writeToGeniaXML(Document dom, Element parent) {} +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/TextSourceManager.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/TextSourceManager.java index 9c1d089c..ab55a65a 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/TextSourceManager.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/TextSourceManager.java @@ -1,93 +1,93 @@ -package edu.ucdenver.ccp.knowtator.model; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.io.brat.StandoffTags; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLAttributes; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLTags; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLUtil; -import edu.ucdenver.ccp.knowtator.io.knowtator.OldKnowtatorXMLAttributes; -import edu.ucdenver.ccp.knowtator.model.collection.TextSourceCollection; -import org.apache.log4j.Logger; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.List; -import java.util.Map; - -public class TextSourceManager implements Savable { - @SuppressWarnings("unused") - private Logger log = Logger.getLogger(TextSourceManager.class); - - private TextSourceCollection textSourceCollection; - private KnowtatorController controller; - - public TextSourceManager(KnowtatorController controller) { - this.controller = controller; - textSourceCollection = new TextSourceCollection(controller); - } - - TextSource addTextSource(File file, String id, String textFileName) { - if (textFileName == null || textFileName.equals("")) { - textFileName = id; - } - TextSource newTextSource = new TextSource(controller, file, textFileName); - textSourceCollection.add(newTextSource); - - controller.getSelectionManager().setSelectedTextSource(newTextSource); - return newTextSource; - } - - public TextSourceCollection getTextSourceCollection() { - return textSourceCollection; - } - - @Override - public void writeToKnowtatorXML(Document dom, Element parent) { - textSourceCollection - .getCollection() - .forEach(textSource -> textSource.writeToKnowtatorXML(dom, parent)); - } - - @Override - public void readFromKnowtatorXML(File file, Element parent) { - for (Node documentNode : - KnowtatorXMLUtil.asList(parent.getElementsByTagName(KnowtatorXMLTags.DOCUMENT))) { - Element documentElement = (Element) documentNode; - String documentID = documentElement.getAttribute(KnowtatorXMLAttributes.ID); - String documentFile = documentElement.getAttribute(KnowtatorXMLAttributes.FILE); - TextSource newTextSource = addTextSource(file, documentID, documentFile); - newTextSource.readFromKnowtatorXML(null, documentElement); - } - } - - @Override - public void readFromOldKnowtatorXML(File file, Element parent) { - - String docID = parent.getAttribute(OldKnowtatorXMLAttributes.TEXT_SOURCE).replace(".txt", ""); - TextSource newTextSource = addTextSource(file, docID, null); - newTextSource.readFromOldKnowtatorXML(null, parent); - } - - @Override - public void readFromBratStandoff( - File file, Map> annotationMap, String content) { - String docID = annotationMap.get(StandoffTags.DOCID).get(0)[0]; - - TextSource newTextSource = addTextSource(file, docID, null); - newTextSource.readFromBratStandoff(null, annotationMap, null); - } - - @SuppressWarnings("RedundantThrows") - @Override - public void writeToBratStandoff(Writer writer) throws IOException {} - - @Override - public void readFromGeniaXML(Element parent, String content) {} - - @Override - public void writeToGeniaXML(Document dom, Element parent) {} -} +package edu.ucdenver.ccp.knowtator.model; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.io.brat.StandoffTags; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLAttributes; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLTags; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLUtil; +import edu.ucdenver.ccp.knowtator.io.knowtator.OldKnowtatorXMLAttributes; +import edu.ucdenver.ccp.knowtator.model.collection.TextSourceCollection; +import org.apache.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import java.io.File; +import java.io.IOException; +import java.io.Writer; +import java.util.List; +import java.util.Map; + +public class TextSourceManager implements Savable { + @SuppressWarnings("unused") + private Logger log = Logger.getLogger(TextSourceManager.class); + + private TextSourceCollection textSourceCollection; + private KnowtatorController controller; + + public TextSourceManager(KnowtatorController controller) { + this.controller = controller; + textSourceCollection = new TextSourceCollection(controller); + } + + TextSource addTextSource(File file, String id, String textFileName) { + if (textFileName == null || textFileName.equals("")) { + textFileName = id; + } + TextSource newTextSource = new TextSource(controller, file, textFileName); + textSourceCollection.add(newTextSource); + + controller.getSelectionManager().setSelectedTextSource(newTextSource); + return newTextSource; + } + + public TextSourceCollection getTextSourceCollection() { + return textSourceCollection; + } + + @Override + public void writeToKnowtatorXML(Document dom, Element parent) { + textSourceCollection + .getCollection() + .forEach(textSource -> textSource.writeToKnowtatorXML(dom, parent)); + } + + @Override + public void readFromKnowtatorXML(File file, Element parent) { + for (Node documentNode : + KnowtatorXMLUtil.asList(parent.getElementsByTagName(KnowtatorXMLTags.DOCUMENT))) { + Element documentElement = (Element) documentNode; + String documentID = documentElement.getAttribute(KnowtatorXMLAttributes.ID); + String documentFile = documentElement.getAttribute(KnowtatorXMLAttributes.FILE); + TextSource newTextSource = addTextSource(file, documentID, documentFile); + newTextSource.readFromKnowtatorXML(null, documentElement); + } + } + + @Override + public void readFromOldKnowtatorXML(File file, Element parent) { + + String docID = parent.getAttribute(OldKnowtatorXMLAttributes.TEXT_SOURCE).replace(".txt", ""); + TextSource newTextSource = addTextSource(file, docID, null); + newTextSource.readFromOldKnowtatorXML(null, parent); + } + + @Override + public void readFromBratStandoff( + File file, Map> annotationMap, String content) { + String docID = annotationMap.get(StandoffTags.DOCID).get(0)[0]; + + TextSource newTextSource = addTextSource(file, docID, null); + newTextSource.readFromBratStandoff(null, annotationMap, null); + } + + @SuppressWarnings("RedundantThrows") + @Override + public void writeToBratStandoff(Writer writer) throws IOException {} + + @Override + public void readFromGeniaXML(Element parent, String content) {} + + @Override + public void writeToGeniaXML(Document dom, Element parent) {} +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/Triple.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/Triple.java index b94d5fcd..7ec98c83 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/Triple.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/Triple.java @@ -1,247 +1,247 @@ -package edu.ucdenver.ccp.knowtator.model; - -import com.mxgraph.model.mxCell; -import com.mxgraph.model.mxGeometry; -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLAttributes; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLTags; -import edu.ucdenver.ccp.knowtator.listeners.OWLSetupListener; -import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; -import edu.ucdenver.ccp.knowtator.model.owl.OWLEntityNullException; -import edu.ucdenver.ccp.knowtator.model.owl.OWLObjectPropertyNotFoundException; -import edu.ucdenver.ccp.knowtator.model.owl.OWLWorkSpaceNotSetException; -import org.apache.log4j.Logger; -import org.protege.editor.owl.model.event.EventType; -import org.protege.editor.owl.model.event.OWLModelManagerChangeEvent; -import org.protege.editor.owl.model.event.OWLModelManagerListener; -import org.semanticweb.owlapi.model.*; -import org.semanticweb.owlapi.util.OWLEntityCollector; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - -import javax.annotation.Nonnull; -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -public class Triple extends mxCell implements Savable, KnowtatorObject, ProjectListener, OWLSetupListener, OWLOntologyChangeListener, OWLModelManagerListener { - private String quantifier; - private String quantifierValue; - private Profile annotator; - private String bratID; - private KnowtatorController controller; - private TextSource textSource; - private OWLObjectProperty property; - private GraphSpace graphSpace; - @SuppressWarnings("unused") - private Logger log = Logger.getLogger(Triple.class); - private boolean dontRedraw; - - Triple( - String id, - mxCell source, - mxCell target, - OWLObjectProperty property, - Profile annotator, - String quantifier, - String quantifierValue, - KnowtatorController controller, TextSource textSource, GraphSpace graphSpace) throws OWLEntityNullException, OWLWorkSpaceNotSetException { - super(controller.getOWLAPIDataExtractor().getOWLEntityRendering(property), new mxGeometry(), null); - - this.property = property; - this.textSource = textSource; - this.controller = controller; - this.annotator = annotator; - this.quantifier = quantifier; - this.quantifierValue = quantifierValue; - this.graphSpace = graphSpace; - - dontRedraw = false; - controller.getOWLAPIDataExtractor().addOWLSetupListener(this); - controller.getProjectManager().addListener(this); - - controller.verifyId(id, this, false); - - getGeometry().setRelative(true); - setEdge(true); - setSource(source); - setTarget(target); - } - - public Triple(String id, - mxCell source, - mxCell target, - String propertyID, - Profile annotator, - String quantifier, - String quantifierValue, - KnowtatorController controller, TextSource textSource, GraphSpace graphSpace) { - super(propertyID, new mxGeometry(), null); - - this.textSource = textSource; - this.controller = controller; - this.annotator = annotator; - this.quantifier = quantifier; - this.quantifierValue = quantifierValue; - this.graphSpace = graphSpace; - - controller.getOWLAPIDataExtractor().addOWLSetupListener(this); - - controller.verifyId(id, this, false); - - getGeometry().setRelative(true); - setEdge(true); - setSource(source); - setTarget(target); - - owlSetup(); - } - - public Profile getAnnotator() { - return annotator; - } - - public void writeToKnowtatorXML(Document dom, Element graphElem) { - Element tripleElem = dom.createElement(KnowtatorXMLTags.TRIPLE); - tripleElem.setAttribute(KnowtatorXMLAttributes.ID, id); - tripleElem.setAttribute(KnowtatorXMLAttributes.ANNOTATOR, annotator.getId()); - tripleElem.setAttribute(KnowtatorXMLAttributes.TRIPLE_SUBJECT, getSource().getId()); - tripleElem.setAttribute(KnowtatorXMLAttributes.TRIPLE_OBJECT, getTarget().getId()); - - String propertyID; - try{ - propertyID = controller.getOWLAPIDataExtractor().getOWLEntityRendering(property); - } catch (OWLEntityNullException | OWLWorkSpaceNotSetException e) { - propertyID = getValue().toString(); - } - tripleElem.setAttribute(KnowtatorXMLAttributes.TRIPLE_PROPERTY, propertyID); - - tripleElem.setAttribute(KnowtatorXMLAttributes.TRIPLE_QUANTIFIER, quantifier); - tripleElem.setAttribute(KnowtatorXMLAttributes.TRIPLE_VALUE, quantifierValue); - graphElem.appendChild(tripleElem); - } - - @Override - public void readFromKnowtatorXML(File file, Element parent) {} - - @Override - public void readFromOldKnowtatorXML(File file, Element parent) {} - - @Override - public void readFromBratStandoff( - File file, Map> annotationMap, String content) {} - - @SuppressWarnings("RedundantThrows") - @Override - public void writeToBratStandoff(Writer writer) throws IOException {} - - @Override - public void readFromGeniaXML(Element parent, String content) {} - - @Override - public void writeToGeniaXML(Document dom, Element parent) {} - - String getBratID() { - return bratID; - } - - void setBratID(String bratID) { - this.bratID = bratID; - } - - public OWLObjectProperty getProperty() { - return property; - } - - public String getQuantifier() { - return quantifier; - } - - public String getQuantifierValue() { - return quantifierValue; - } - - @Override - public TextSource getTextSource() { - return textSource; - } - - @Override - public void setValue(Object value) { - super.setValue(value); - if (graphSpace != null && !dontRedraw) { - graphSpace.reDrawGraph(); - } - } - - @Override - public void owlSetup() { - try { - controller.getOWLAPIDataExtractor().getWorkSpace().getOWLModelManager().addListener(this); - controller.getOWLAPIDataExtractor().getWorkSpace().getOWLModelManager().addOntologyChangeListener(this); - - property = controller.getOWLAPIDataExtractor().getOWLObjectPropertyByID(getValue().toString()); - dontRedraw = true; - setValue(controller.getOWLAPIDataExtractor().getOWLEntityRendering(property)); - dontRedraw = false; - } catch (OWLWorkSpaceNotSetException | OWLObjectPropertyNotFoundException | OWLEntityNullException ignored) { - - } - } - - @Override - public void ontologiesChanged(@Nonnull List changes) { - Set possiblyAddedEntities = new HashSet<>(); - Set possiblyRemovedEntities = new HashSet<>(); - OWLEntityCollector addedCollector = new OWLEntityCollector(possiblyAddedEntities); - OWLEntityCollector removedCollector = new OWLEntityCollector(possiblyRemovedEntities); - - for (OWLOntologyChange chg : changes) { - if (chg.isAxiomChange()) { - OWLAxiomChange axChg = (OWLAxiomChange) chg; - if (axChg.getAxiom().getAxiomType() == AxiomType.DECLARATION) { - if (axChg instanceof AddAxiom) { - axChg.getAxiom().accept(addedCollector); - } else { - axChg.getAxiom().accept(removedCollector); - } - } - } - } - - /* - For now, I will assume that entity removed is the one that existed and the one - that is added is the new name for it. - */ - if (!possiblyAddedEntities.isEmpty() && !possiblyRemovedEntities.isEmpty()) { - OWLEntity oldProperty = possiblyRemovedEntities.iterator().next(); - OWLEntity newProperty = possiblyAddedEntities.iterator().next(); - if (property == oldProperty) { - setValue(newProperty); - } - } - } - - @Override - public void handleChange(OWLModelManagerChangeEvent event) { - if (event.isType(EventType.ENTITY_RENDERER_CHANGED)) { - try { - setValue(controller.getOWLAPIDataExtractor().getOWLEntityRendering(property)); - } catch (OWLWorkSpaceNotSetException | OWLEntityNullException ignored) { - } - } - } - - @Override - public void projectClosed() { - } - - @Override - public void projectLoaded() { - owlSetup(); - } -} +package edu.ucdenver.ccp.knowtator.model; + +import com.mxgraph.model.mxCell; +import com.mxgraph.model.mxGeometry; +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLAttributes; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLTags; +import edu.ucdenver.ccp.knowtator.listeners.OWLSetupListener; +import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; +import edu.ucdenver.ccp.knowtator.model.owl.OWLEntityNullException; +import edu.ucdenver.ccp.knowtator.model.owl.OWLObjectPropertyNotFoundException; +import edu.ucdenver.ccp.knowtator.model.owl.OWLWorkSpaceNotSetException; +import org.apache.log4j.Logger; +import org.protege.editor.owl.model.event.EventType; +import org.protege.editor.owl.model.event.OWLModelManagerChangeEvent; +import org.protege.editor.owl.model.event.OWLModelManagerListener; +import org.semanticweb.owlapi.model.*; +import org.semanticweb.owlapi.util.OWLEntityCollector; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import javax.annotation.Nonnull; +import java.io.File; +import java.io.IOException; +import java.io.Writer; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class Triple extends mxCell implements Savable, KnowtatorObject, ProjectListener, OWLSetupListener, OWLOntologyChangeListener, OWLModelManagerListener { + private String quantifier; + private String quantifierValue; + private Profile annotator; + private String bratID; + private KnowtatorController controller; + private TextSource textSource; + private OWLObjectProperty property; + private GraphSpace graphSpace; + @SuppressWarnings("unused") + private Logger log = Logger.getLogger(Triple.class); + private boolean dontRedraw; + + Triple( + String id, + mxCell source, + mxCell target, + OWLObjectProperty property, + Profile annotator, + String quantifier, + String quantifierValue, + KnowtatorController controller, TextSource textSource, GraphSpace graphSpace) throws OWLEntityNullException, OWLWorkSpaceNotSetException { + super(controller.getOWLAPIDataExtractor().getOWLEntityRendering(property), new mxGeometry(), null); + + this.property = property; + this.textSource = textSource; + this.controller = controller; + this.annotator = annotator; + this.quantifier = quantifier; + this.quantifierValue = quantifierValue; + this.graphSpace = graphSpace; + + dontRedraw = false; + controller.getOWLAPIDataExtractor().addOWLSetupListener(this); + controller.getProjectManager().addListener(this); + + controller.verifyId(id, this, false); + + getGeometry().setRelative(true); + setEdge(true); + setSource(source); + setTarget(target); + } + + public Triple(String id, + mxCell source, + mxCell target, + String propertyID, + Profile annotator, + String quantifier, + String quantifierValue, + KnowtatorController controller, TextSource textSource, GraphSpace graphSpace) { + super(propertyID, new mxGeometry(), null); + + this.textSource = textSource; + this.controller = controller; + this.annotator = annotator; + this.quantifier = quantifier; + this.quantifierValue = quantifierValue; + this.graphSpace = graphSpace; + + controller.getOWLAPIDataExtractor().addOWLSetupListener(this); + + controller.verifyId(id, this, false); + + getGeometry().setRelative(true); + setEdge(true); + setSource(source); + setTarget(target); + + owlSetup(); + } + + public Profile getAnnotator() { + return annotator; + } + + public void writeToKnowtatorXML(Document dom, Element graphElem) { + Element tripleElem = dom.createElement(KnowtatorXMLTags.TRIPLE); + tripleElem.setAttribute(KnowtatorXMLAttributes.ID, id); + tripleElem.setAttribute(KnowtatorXMLAttributes.ANNOTATOR, annotator.getId()); + tripleElem.setAttribute(KnowtatorXMLAttributes.TRIPLE_SUBJECT, getSource().getId()); + tripleElem.setAttribute(KnowtatorXMLAttributes.TRIPLE_OBJECT, getTarget().getId()); + + String propertyID; + try{ + propertyID = controller.getOWLAPIDataExtractor().getOWLEntityRendering(property); + } catch (OWLEntityNullException | OWLWorkSpaceNotSetException e) { + propertyID = getValue().toString(); + } + tripleElem.setAttribute(KnowtatorXMLAttributes.TRIPLE_PROPERTY, propertyID); + + tripleElem.setAttribute(KnowtatorXMLAttributes.TRIPLE_QUANTIFIER, quantifier); + tripleElem.setAttribute(KnowtatorXMLAttributes.TRIPLE_VALUE, quantifierValue); + graphElem.appendChild(tripleElem); + } + + @Override + public void readFromKnowtatorXML(File file, Element parent) {} + + @Override + public void readFromOldKnowtatorXML(File file, Element parent) {} + + @Override + public void readFromBratStandoff( + File file, Map> annotationMap, String content) {} + + @SuppressWarnings("RedundantThrows") + @Override + public void writeToBratStandoff(Writer writer) throws IOException {} + + @Override + public void readFromGeniaXML(Element parent, String content) {} + + @Override + public void writeToGeniaXML(Document dom, Element parent) {} + + String getBratID() { + return bratID; + } + + void setBratID(String bratID) { + this.bratID = bratID; + } + + public OWLObjectProperty getProperty() { + return property; + } + + public String getQuantifier() { + return quantifier; + } + + public String getQuantifierValue() { + return quantifierValue; + } + + @Override + public TextSource getTextSource() { + return textSource; + } + + @Override + public void setValue(Object value) { + super.setValue(value); + if (graphSpace != null && !dontRedraw) { + graphSpace.reDrawGraph(); + } + } + + @Override + public void owlSetup() { + try { + controller.getOWLAPIDataExtractor().getWorkSpace().getOWLModelManager().addListener(this); + controller.getOWLAPIDataExtractor().getWorkSpace().getOWLModelManager().addOntologyChangeListener(this); + + property = controller.getOWLAPIDataExtractor().getOWLObjectPropertyByID(getValue().toString()); + dontRedraw = true; + setValue(controller.getOWLAPIDataExtractor().getOWLEntityRendering(property)); + dontRedraw = false; + } catch (OWLWorkSpaceNotSetException | OWLObjectPropertyNotFoundException | OWLEntityNullException ignored) { + + } + } + + @Override + public void ontologiesChanged(@Nonnull List changes) { + Set possiblyAddedEntities = new HashSet<>(); + Set possiblyRemovedEntities = new HashSet<>(); + OWLEntityCollector addedCollector = new OWLEntityCollector(possiblyAddedEntities); + OWLEntityCollector removedCollector = new OWLEntityCollector(possiblyRemovedEntities); + + for (OWLOntologyChange chg : changes) { + if (chg.isAxiomChange()) { + OWLAxiomChange axChg = (OWLAxiomChange) chg; + if (axChg.getAxiom().getAxiomType() == AxiomType.DECLARATION) { + if (axChg instanceof AddAxiom) { + axChg.getAxiom().accept(addedCollector); + } else { + axChg.getAxiom().accept(removedCollector); + } + } + } + } + + /* + For now, I will assume that entity removed is the one that existed and the one + that is added is the new name for it. + */ + if (!possiblyAddedEntities.isEmpty() && !possiblyRemovedEntities.isEmpty()) { + OWLEntity oldProperty = possiblyRemovedEntities.iterator().next(); + OWLEntity newProperty = possiblyAddedEntities.iterator().next(); + if (property == oldProperty) { + setValue(newProperty); + } + } + } + + @Override + public void handleChange(OWLModelManagerChangeEvent event) { + if (event.isType(EventType.ENTITY_RENDERER_CHANGED)) { + try { + setValue(controller.getOWLAPIDataExtractor().getOWLEntityRendering(property)); + } catch (OWLWorkSpaceNotSetException | OWLEntityNullException ignored) { + } + } + } + + @Override + public void projectClosed() { + } + + @Override + public void projectLoaded() { + owlSetup(); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/AnnotationCollection.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/AnnotationCollection.java index d47133ea..42dbc29e 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/AnnotationCollection.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/AnnotationCollection.java @@ -1,13 +1,13 @@ -package edu.ucdenver.ccp.knowtator.model.collection; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.listeners.AnnotationCollectionListener; -import edu.ucdenver.ccp.knowtator.model.Annotation; - -import java.util.TreeSet; - -public class AnnotationCollection extends CyclableCollection { - public AnnotationCollection(KnowtatorController controller) { - super(controller, new TreeSet<>(Annotation::compare)); - } -} +package edu.ucdenver.ccp.knowtator.model.collection; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.listeners.AnnotationCollectionListener; +import edu.ucdenver.ccp.knowtator.model.Annotation; + +import java.util.TreeSet; + +public class AnnotationCollection extends CyclableCollection { + public AnnotationCollection(KnowtatorController controller) { + super(controller, new TreeSet<>(Annotation::compare)); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/CyclableCollection.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/CyclableCollection.java index 445c8077..ef9cfc39 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/CyclableCollection.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/CyclableCollection.java @@ -1,41 +1,41 @@ -package edu.ucdenver.ccp.knowtator.model.collection; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.listeners.CollectionListener; -import edu.ucdenver.ccp.knowtator.model.KnowtatorObject; - -import java.util.TreeSet; - -public class CyclableCollection> - extends ListenableCollection, L> { - - CyclableCollection(KnowtatorController controller, TreeSet collection) { - super(controller, collection); - } - - public K getPrevious(K current) { - - K previous; - try { - previous = - collection.contains(current) ? collection.lower(current) : collection.floor(current); - } catch (NullPointerException npe) { - previous = null; - } - if (previous == null) previous = collection.last(); - - return previous; - } - - public K getNext(K current) { - K next; - try { - next = - collection.contains(current) ? collection.higher(current) : collection.ceiling(current); - } catch (NullPointerException npe) { - next = null; - } - if (next == null) next = collection.first(); - return next; - } -} +package edu.ucdenver.ccp.knowtator.model.collection; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.listeners.CollectionListener; +import edu.ucdenver.ccp.knowtator.model.KnowtatorObject; + +import java.util.TreeSet; + +public class CyclableCollection> + extends ListenableCollection, L> { + + CyclableCollection(KnowtatorController controller, TreeSet collection) { + super(controller, collection); + } + + public K getPrevious(K current) { + + K previous; + try { + previous = + collection.contains(current) ? collection.lower(current) : collection.floor(current); + } catch (NullPointerException npe) { + previous = null; + } + if (previous == null) previous = collection.last(); + + return previous; + } + + public K getNext(K current) { + K next; + try { + next = + collection.contains(current) ? collection.higher(current) : collection.ceiling(current); + } catch (NullPointerException npe) { + next = null; + } + if (next == null) next = collection.first(); + return next; + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/GraphSpaceCollection.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/GraphSpaceCollection.java index 4e0d4f2b..184099d9 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/GraphSpaceCollection.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/GraphSpaceCollection.java @@ -1,15 +1,15 @@ -package edu.ucdenver.ccp.knowtator.model.collection; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.listeners.GraphSpaceCollectionListener; -import edu.ucdenver.ccp.knowtator.model.GraphSpace; - -import java.util.TreeSet; - -public class GraphSpaceCollection - extends CyclableCollection { - - public GraphSpaceCollection(KnowtatorController controller) { - super(controller, new TreeSet<>(GraphSpace::compare)); - } -} +package edu.ucdenver.ccp.knowtator.model.collection; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.listeners.GraphSpaceCollectionListener; +import edu.ucdenver.ccp.knowtator.model.GraphSpace; + +import java.util.TreeSet; + +public class GraphSpaceCollection + extends CyclableCollection { + + public GraphSpaceCollection(KnowtatorController controller) { + super(controller, new TreeSet<>(GraphSpace::compare)); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/ListenableCollection.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/ListenableCollection.java index b07e7a6c..690d7770 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/ListenableCollection.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/ListenableCollection.java @@ -1,92 +1,92 @@ -package edu.ucdenver.ccp.knowtator.model.collection; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.listeners.CollectionListener; -import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; -import edu.ucdenver.ccp.knowtator.model.KnowtatorObject; - -import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.stream.Stream; - -public class ListenableCollection< - K extends KnowtatorObject, C extends Collection, L extends CollectionListener> - implements ProjectListener, Iterable { - public final C collection; - private final ArrayList listeners; - - ListenableCollection(KnowtatorController controller, C collection) { - this.collection = collection; - listeners = new ArrayList<>(); - controller.getProjectManager().addListener(this); - } - - public void add(K objectToAdd) { - collection.add(objectToAdd); - listeners.forEach(profilesListener -> profilesListener.added(objectToAdd)); - } - - public void remove(K objectToRemove) { - collection.remove(objectToRemove); - listeners.forEach(listener -> listener.removed(objectToRemove)); - } - - public K get(String id) { - for (K obj : collection) { - if (obj.getId().equals(id)) { - return obj; - } - } - return null; - } - - public boolean contains(K objToFind) { - return containsID(objToFind.getId()); - } - - public boolean containsID(String idToFind) { - for (K id : collection) { - if (id.getId().equals(idToFind)) { - return true; - } - } - return false; - } - - public void addListener(L listener) { - listeners.add(listener); - } - - public void removeListener(L listener) { - listeners.remove(listener); - } - - @Override - public void projectClosed() { - collection.clear(); - listeners.clear(); - } - - @Override - public void projectLoaded() {} - - @Override - @Nonnull - public Iterator iterator() { - return collection.iterator(); - } - - public Stream stream() { - return collection.stream(); - } - - public int size() { - return collection.size(); - } - - public C getCollection() { - return collection; - } -} +package edu.ucdenver.ccp.knowtator.model.collection; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.listeners.CollectionListener; +import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; +import edu.ucdenver.ccp.knowtator.model.KnowtatorObject; + +import javax.annotation.Nonnull; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.stream.Stream; + +public class ListenableCollection< + K extends KnowtatorObject, C extends Collection, L extends CollectionListener> + implements ProjectListener, Iterable { + public final C collection; + private final ArrayList listeners; + + ListenableCollection(KnowtatorController controller, C collection) { + this.collection = collection; + listeners = new ArrayList<>(); + controller.getProjectManager().addListener(this); + } + + public void add(K objectToAdd) { + collection.add(objectToAdd); + listeners.forEach(profilesListener -> profilesListener.added(objectToAdd)); + } + + public void remove(K objectToRemove) { + collection.remove(objectToRemove); + listeners.forEach(listener -> listener.removed(objectToRemove)); + } + + public K get(String id) { + for (K obj : collection) { + if (obj.getId().equals(id)) { + return obj; + } + } + return null; + } + + public boolean contains(K objToFind) { + return containsID(objToFind.getId()); + } + + public boolean containsID(String idToFind) { + for (K id : collection) { + if (id.getId().equals(idToFind)) { + return true; + } + } + return false; + } + + public void addListener(L listener) { + listeners.add(listener); + } + + public void removeListener(L listener) { + listeners.remove(listener); + } + + @Override + public void projectClosed() { + collection.clear(); + listeners.clear(); + } + + @Override + public void projectLoaded() {} + + @Override + @Nonnull + public Iterator iterator() { + return collection.iterator(); + } + + public Stream stream() { + return collection.stream(); + } + + public int size() { + return collection.size(); + } + + public C getCollection() { + return collection; + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/ProfileCollection.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/ProfileCollection.java index dffa9c16..626a1eee 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/ProfileCollection.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/ProfileCollection.java @@ -1,28 +1,28 @@ -package edu.ucdenver.ccp.knowtator.model.collection; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.listeners.ProfileCollectionListener; -import edu.ucdenver.ccp.knowtator.model.Profile; - -import java.util.TreeSet; - -public class ProfileCollection extends CyclableCollection { - - private Profile defaultProfile; - - public ProfileCollection(KnowtatorController controller) { - super(controller, new TreeSet<>(Profile::compare)); - defaultProfile = new Profile(controller, "Default"); - add(defaultProfile); - } - - public Profile getDefaultProfile() { - return defaultProfile; - } - - @Override - public void projectLoaded() { - super.projectLoaded(); - add(defaultProfile); - } -} +package edu.ucdenver.ccp.knowtator.model.collection; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.listeners.ProfileCollectionListener; +import edu.ucdenver.ccp.knowtator.model.Profile; + +import java.util.TreeSet; + +public class ProfileCollection extends CyclableCollection { + + private Profile defaultProfile; + + public ProfileCollection(KnowtatorController controller) { + super(controller, new TreeSet<>(Profile::compare)); + defaultProfile = new Profile(controller, "Default"); + add(defaultProfile); + } + + public Profile getDefaultProfile() { + return defaultProfile; + } + + @Override + public void projectLoaded() { + super.projectLoaded(); + add(defaultProfile); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/SpanCollection.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/SpanCollection.java index fa071ea2..13a2b944 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/SpanCollection.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/SpanCollection.java @@ -1,13 +1,13 @@ -package edu.ucdenver.ccp.knowtator.model.collection; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.listeners.SpanCollectionListener; -import edu.ucdenver.ccp.knowtator.model.Span; - -import java.util.TreeSet; - -public class SpanCollection extends CyclableCollection { - public SpanCollection(KnowtatorController controller) { - super(controller, new TreeSet<>(Span::compare)); - } -} +package edu.ucdenver.ccp.knowtator.model.collection; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.listeners.SpanCollectionListener; +import edu.ucdenver.ccp.knowtator.model.Span; + +import java.util.TreeSet; + +public class SpanCollection extends CyclableCollection { + public SpanCollection(KnowtatorController controller) { + super(controller, new TreeSet<>(Span::compare)); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/TextSourceCollection.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/TextSourceCollection.java index 9c2f18b1..c0518e93 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/TextSourceCollection.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/collection/TextSourceCollection.java @@ -1,15 +1,15 @@ -package edu.ucdenver.ccp.knowtator.model.collection; - -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.listeners.TextSourceCollectionListener; -import edu.ucdenver.ccp.knowtator.model.TextSource; - -import java.util.TreeSet; - -public class TextSourceCollection - extends CyclableCollection { - - public TextSourceCollection(KnowtatorController controller) { - super(controller, new TreeSet<>(TextSource::compare)); - } -} +package edu.ucdenver.ccp.knowtator.model.collection; + +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.listeners.TextSourceCollectionListener; +import edu.ucdenver.ccp.knowtator.model.TextSource; + +import java.util.TreeSet; + +public class TextSourceCollection + extends CyclableCollection { + + public TextSourceCollection(KnowtatorController controller) { + super(controller, new TreeSet<>(TextSource::compare)); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLAPIDataExtractor.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLAPIDataExtractor.java index d5b6dd43..4b8b59bf 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLAPIDataExtractor.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLAPIDataExtractor.java @@ -1,214 +1,214 @@ -package edu.ucdenver.ccp.knowtator.model.owl; - -import com.google.common.base.Optional; -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.listeners.DebugListener; -import edu.ucdenver.ccp.knowtator.listeners.OWLSetupListener; -import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; -import org.apache.log4j.LogManager; -import org.apache.log4j.Logger; -import org.protege.editor.core.ui.util.AugmentedJTextField; -import org.protege.editor.owl.model.OWLWorkspace; -import org.protege.editor.owl.model.selection.OWLSelectionModelListener; -import org.protege.editor.owl.ui.renderer.OWLRendererPreferences; -import org.protege.editor.owl.ui.search.SearchDialogPanel; -import org.semanticweb.owlapi.apibinding.OWLManager; -import org.semanticweb.owlapi.model.*; - -import javax.swing.*; -import java.io.File; -import java.io.IOException; -import java.io.Serializable; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.*; -import java.util.stream.Collectors; - -public class OWLAPIDataExtractor implements Serializable, DebugListener, OWLSelectionModelListener, ProjectListener { - @SuppressWarnings("unused") - private static final Logger log = LogManager.getLogger(OWLAPIDataExtractor.class); - - private OWLWorkspace owlWorkSpace; - private KnowtatorController controller; - private List owlSetupListeners; - - public OWLAPIDataExtractor(KnowtatorController controller) { - this.controller = controller; - controller.getProjectManager().addListener(this); - owlSetupListeners = new ArrayList<>(); - controller.addDebugListener(this); - } - - public void addOWLSetupListener(OWLSetupListener listener) { - owlSetupListeners.add(listener); - } - - public OWLClass getOWLClassByID(String classID) throws OWLWorkSpaceNotSetException, OWLClassNotFoundException { - OWLClass owlClass = getWorkSpace().getOWLModelManager().getOWLEntityFinder().getOWLClass(classID); - if (owlClass == null) { - throw new OWLClassNotFoundException(); - } else { - return owlClass; - } - } - - public OWLObjectProperty getOWLObjectPropertyByID(String propertyID) - throws OWLWorkSpaceNotSetException, OWLObjectPropertyNotFoundException { - OWLObjectProperty property = getWorkSpace() - .getOWLModelManager() - .getOWLEntityFinder() - .getOWLObjectProperty(propertyID); - if (property == null) { - throw new OWLObjectPropertyNotFoundException(); - } else { - return property; - } - } - - public void setRenderRDFSLabel() throws OWLWorkSpaceNotSetException { - IRI labelIRI = getWorkSpace().getOWLModelManager().getOWLDataFactory().getRDFSLabel().getIRI(); - OWLRendererPreferences.getInstance() - .setAnnotations( - Collections.singletonList( - labelIRI)); - - getWorkSpace().getOWLModelManager().refreshRenderer(); - } - - public Set getDescendants(OWLClass cls) throws OWLWorkSpaceNotSetException { - return getWorkSpace() - .getOWLModelManager() - .getOWLHierarchyManager() - .getOWLClassHierarchyProvider() - .getDescendants(cls); - } - - public String getOWLEntityRendering(OWLEntity owlEntity) throws OWLWorkSpaceNotSetException, OWLEntityNullException { - if (owlEntity == null) { - throw new OWLEntityNullException(); - } - return getWorkSpace().getOWLModelManager().getOWLEntityRenderer().render(owlEntity); - } - - public void setUpOWL(OWLWorkspace owlWorkSpace) { - log.warn("OWLAPIDataExtractor: setup OWL API connection"); - this.owlWorkSpace = owlWorkSpace; - owlWorkSpace.getOWLSelectionModel().addListener(this); - owlSetupListeners.forEach(OWLSetupListener::owlSetup); - } - - public OWLWorkspace getWorkSpace() throws OWLWorkSpaceNotSetException { - if (owlWorkSpace == null) { - throw new OWLWorkSpaceNotSetException(); - } else { - return owlWorkSpace; - } - } - - public void read(File file) throws IOException, OWLWorkSpaceNotSetException { - if (file.isDirectory()) { - for (Path path1 : - Files.newDirectoryStream( - Paths.get(file.toURI()), path -> path.toString().endsWith(".owl"))) { - loadOntologyFromLocation(path1.toFile().toURI().toString()); - } - } - } - - private void loadOntologyFromLocation(String ontologyLocation) - throws OWLWorkSpaceNotSetException { - OWLWorkspace workSpace = getWorkSpace(); - List ontologies = - workSpace - .getOWLModelManager() - .getActiveOntologies() - .stream() - .map( - ontology -> { - OWLOntologyID ontID = ontology.getOntologyID(); - //noinspection Guava - Optional ontIRI = ontID.getOntologyIRI(); - if (ontIRI.isPresent()) { - return ontIRI.get().toURI().toString(); - } else { - return null; - } - }) - .collect(Collectors.toList()); - - // String ontologyLocation = OntologyTranslator.translate(classID); - if (!ontologies.contains(ontologyLocation)) { - log.warn("Loading ontology: " + ontologyLocation); - try { - OWLOntology newOntology = - workSpace - .getOWLModelManager() - .getOWLOntologyManager() - .loadOntology((IRI.create(ontologyLocation))); - workSpace.getOWLModelManager().setActiveOntology(newOntology); - } catch (OWLOntologyCreationException e) { - log.warn("Knowtator: OWLAPIDataExtractor: Ontology already loaded"); - } - } - } - - public void searchForString(String stringToSearch) throws OWLWorkSpaceNotSetException { - JDialog dialog = SearchDialogPanel.createDialog(null, getWorkSpace().getOWLEditorKit()); - Arrays.stream(dialog.getContentPane().getComponents()).forEach(component -> { - if (component instanceof AugmentedJTextField) { - ((AugmentedJTextField) component).setText(stringToSearch); - } - }); - - dialog.setVisible(true); - } - - @Override - public void setDebug() { - OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); - // OWLWorkspace workspace = new OWLWorkspace(); - // OWLEditorKitFactory editorKitFactory = new OWLEditorKitFactory(); - // OWLEditorKit editorKit = new OWLEditorKit(editorKitFactory); - // workspace.setup(editorKit); - // workspace.initialise(); - OWLDataFactory factory = manager.getOWLDataFactory(); - - IRI iri = IRI.create("http://www.co-ode.org/ontologies/pizza/pizza.owl#DomainConcept"); - OWLClass testClass = factory.getOWLClass(iri); - controller.getSelectionManager().setSelectedOWLClass(testClass); - - iri = IRI.create("http://www.co-ode.org/ontologies/pizza/pizza.owl#HasCountryOfOrigin"); - OWLObjectProperty objectProperty = factory.getOWLObjectProperty(iri); - controller.getSelectionManager().setSelectedOWLObjectProperty(objectProperty); - } - - @Override - public void selectionChanged() { - OWLEntity ent = null; - try { - ent = getWorkSpace().getOWLSelectionModel().getSelectedEntity(); - } catch (OWLWorkSpaceNotSetException e) { - e.printStackTrace(); - } - if (ent instanceof OWLObjectProperty) { - controller.getSelectionManager().setSelectedOWLObjectProperty((OWLObjectProperty) ent); - } else if (ent instanceof OWLClass) { - controller.getSelectionManager().setSelectedOWLClass((OWLClass) ent); - } - } - - @Override - public void projectClosed() { - - } - - @Override - public void projectLoaded() { - try { - setRenderRDFSLabel(); - } catch (OWLWorkSpaceNotSetException e) { - e.printStackTrace(); - } - } -} +package edu.ucdenver.ccp.knowtator.model.owl; + +import com.google.common.base.Optional; +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.listeners.DebugListener; +import edu.ucdenver.ccp.knowtator.listeners.OWLSetupListener; +import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; +import org.apache.log4j.LogManager; +import org.apache.log4j.Logger; +import org.protege.editor.core.ui.util.AugmentedJTextField; +import org.protege.editor.owl.model.OWLWorkspace; +import org.protege.editor.owl.model.selection.OWLSelectionModelListener; +import org.protege.editor.owl.ui.renderer.OWLRendererPreferences; +import org.protege.editor.owl.ui.search.SearchDialogPanel; +import org.semanticweb.owlapi.apibinding.OWLManager; +import org.semanticweb.owlapi.model.*; + +import javax.swing.*; +import java.io.File; +import java.io.IOException; +import java.io.Serializable; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; +import java.util.stream.Collectors; + +public class OWLAPIDataExtractor implements Serializable, DebugListener, OWLSelectionModelListener, ProjectListener { + @SuppressWarnings("unused") + private static final Logger log = LogManager.getLogger(OWLAPIDataExtractor.class); + + private OWLWorkspace owlWorkSpace; + private KnowtatorController controller; + private List owlSetupListeners; + + public OWLAPIDataExtractor(KnowtatorController controller) { + this.controller = controller; + controller.getProjectManager().addListener(this); + owlSetupListeners = new ArrayList<>(); + controller.addDebugListener(this); + } + + public void addOWLSetupListener(OWLSetupListener listener) { + owlSetupListeners.add(listener); + } + + public OWLClass getOWLClassByID(String classID) throws OWLWorkSpaceNotSetException, OWLClassNotFoundException { + OWLClass owlClass = getWorkSpace().getOWLModelManager().getOWLEntityFinder().getOWLClass(classID); + if (owlClass == null) { + throw new OWLClassNotFoundException(); + } else { + return owlClass; + } + } + + public OWLObjectProperty getOWLObjectPropertyByID(String propertyID) + throws OWLWorkSpaceNotSetException, OWLObjectPropertyNotFoundException { + OWLObjectProperty property = getWorkSpace() + .getOWLModelManager() + .getOWLEntityFinder() + .getOWLObjectProperty(propertyID); + if (property == null) { + throw new OWLObjectPropertyNotFoundException(); + } else { + return property; + } + } + + public void setRenderRDFSLabel() throws OWLWorkSpaceNotSetException { + IRI labelIRI = getWorkSpace().getOWLModelManager().getOWLDataFactory().getRDFSLabel().getIRI(); + OWLRendererPreferences.getInstance() + .setAnnotations( + Collections.singletonList( + labelIRI)); + + getWorkSpace().getOWLModelManager().refreshRenderer(); + } + + public Set getDescendants(OWLClass cls) throws OWLWorkSpaceNotSetException { + return getWorkSpace() + .getOWLModelManager() + .getOWLHierarchyManager() + .getOWLClassHierarchyProvider() + .getDescendants(cls); + } + + public String getOWLEntityRendering(OWLEntity owlEntity) throws OWLWorkSpaceNotSetException, OWLEntityNullException { + if (owlEntity == null) { + throw new OWLEntityNullException(); + } + return getWorkSpace().getOWLModelManager().getOWLEntityRenderer().render(owlEntity); + } + + public void setUpOWL(OWLWorkspace owlWorkSpace) { + log.warn("OWLAPIDataExtractor: setup OWL API connection"); + this.owlWorkSpace = owlWorkSpace; + owlWorkSpace.getOWLSelectionModel().addListener(this); + owlSetupListeners.forEach(OWLSetupListener::owlSetup); + } + + public OWLWorkspace getWorkSpace() throws OWLWorkSpaceNotSetException { + if (owlWorkSpace == null) { + throw new OWLWorkSpaceNotSetException(); + } else { + return owlWorkSpace; + } + } + + public void read(File file) throws IOException, OWLWorkSpaceNotSetException { + if (file.isDirectory()) { + for (Path path1 : + Files.newDirectoryStream( + Paths.get(file.toURI()), path -> path.toString().endsWith(".owl"))) { + loadOntologyFromLocation(path1.toFile().toURI().toString()); + } + } + } + + private void loadOntologyFromLocation(String ontologyLocation) + throws OWLWorkSpaceNotSetException { + OWLWorkspace workSpace = getWorkSpace(); + List ontologies = + workSpace + .getOWLModelManager() + .getActiveOntologies() + .stream() + .map( + ontology -> { + OWLOntologyID ontID = ontology.getOntologyID(); + //noinspection Guava + Optional ontIRI = ontID.getOntologyIRI(); + if (ontIRI.isPresent()) { + return ontIRI.get().toURI().toString(); + } else { + return null; + } + }) + .collect(Collectors.toList()); + + // String ontologyLocation = OntologyTranslator.translate(classID); + if (!ontologies.contains(ontologyLocation)) { + log.warn("Loading ontology: " + ontologyLocation); + try { + OWLOntology newOntology = + workSpace + .getOWLModelManager() + .getOWLOntologyManager() + .loadOntology((IRI.create(ontologyLocation))); + workSpace.getOWLModelManager().setActiveOntology(newOntology); + } catch (OWLOntologyCreationException e) { + log.warn("Knowtator: OWLAPIDataExtractor: Ontology already loaded"); + } + } + } + + public void searchForString(String stringToSearch) throws OWLWorkSpaceNotSetException { + JDialog dialog = SearchDialogPanel.createDialog(null, getWorkSpace().getOWLEditorKit()); + Arrays.stream(dialog.getContentPane().getComponents()).forEach(component -> { + if (component instanceof AugmentedJTextField) { + ((AugmentedJTextField) component).setText(stringToSearch); + } + }); + + dialog.setVisible(true); + } + + @Override + public void setDebug() { + OWLOntologyManager manager = OWLManager.createOWLOntologyManager(); + // OWLWorkspace workspace = new OWLWorkspace(); + // OWLEditorKitFactory editorKitFactory = new OWLEditorKitFactory(); + // OWLEditorKit editorKit = new OWLEditorKit(editorKitFactory); + // workspace.setup(editorKit); + // workspace.initialise(); + OWLDataFactory factory = manager.getOWLDataFactory(); + + IRI iri = IRI.create("http://www.co-ode.org/ontologies/pizza/pizza.owl#DomainConcept"); + OWLClass testClass = factory.getOWLClass(iri); + controller.getSelectionManager().setSelectedOWLClass(testClass); + + iri = IRI.create("http://www.co-ode.org/ontologies/pizza/pizza.owl#HasCountryOfOrigin"); + OWLObjectProperty objectProperty = factory.getOWLObjectProperty(iri); + controller.getSelectionManager().setSelectedOWLObjectProperty(objectProperty); + } + + @Override + public void selectionChanged() { + OWLEntity ent = null; + try { + ent = getWorkSpace().getOWLSelectionModel().getSelectedEntity(); + } catch (OWLWorkSpaceNotSetException e) { + e.printStackTrace(); + } + if (ent instanceof OWLObjectProperty) { + controller.getSelectionManager().setSelectedOWLObjectProperty((OWLObjectProperty) ent); + } else if (ent instanceof OWLClass) { + controller.getSelectionManager().setSelectedOWLClass((OWLClass) ent); + } + } + + @Override + public void projectClosed() { + + } + + @Override + public void projectLoaded() { + try { + setRenderRDFSLabel(); + } catch (OWLWorkSpaceNotSetException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLAnnotationNotFoundException.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLAnnotationNotFoundException.java index bbd3ba07..2104c1b2 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLAnnotationNotFoundException.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLAnnotationNotFoundException.java @@ -1,4 +1,4 @@ -package edu.ucdenver.ccp.knowtator.model.owl; - -public class OWLAnnotationNotFoundException extends Exception { -} +package edu.ucdenver.ccp.knowtator.model.owl; + +public class OWLAnnotationNotFoundException extends Exception { +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLAnnotationPropertyNotFoundException.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLAnnotationPropertyNotFoundException.java index 4af5929e..f3b7c0a9 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLAnnotationPropertyNotFoundException.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLAnnotationPropertyNotFoundException.java @@ -1,4 +1,4 @@ -package edu.ucdenver.ccp.knowtator.model.owl; - -public class OWLAnnotationPropertyNotFoundException extends Exception { -} +package edu.ucdenver.ccp.knowtator.model.owl; + +public class OWLAnnotationPropertyNotFoundException extends Exception { +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLClassNotFoundException.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLClassNotFoundException.java index b2b3ebd5..83ff6091 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLClassNotFoundException.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLClassNotFoundException.java @@ -1,4 +1,4 @@ -package edu.ucdenver.ccp.knowtator.model.owl; - -public class OWLClassNotFoundException extends Exception { -} +package edu.ucdenver.ccp.knowtator.model.owl; + +public class OWLClassNotFoundException extends Exception { +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLEntityNullException.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLEntityNullException.java index 7af371c5..82a5d582 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLEntityNullException.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLEntityNullException.java @@ -1,4 +1,4 @@ -package edu.ucdenver.ccp.knowtator.model.owl; - -public class OWLEntityNullException extends Exception { -} +package edu.ucdenver.ccp.knowtator.model.owl; + +public class OWLEntityNullException extends Exception { +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLObjectPropertyNotFoundException.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLObjectPropertyNotFoundException.java index 92c908b9..07a545ff 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLObjectPropertyNotFoundException.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLObjectPropertyNotFoundException.java @@ -1,4 +1,4 @@ -package edu.ucdenver.ccp.knowtator.model.owl; - -public class OWLObjectPropertyNotFoundException extends Exception { -} +package edu.ucdenver.ccp.knowtator.model.owl; + +public class OWLObjectPropertyNotFoundException extends Exception { +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLWorkSpaceNotSetException.java b/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLWorkSpaceNotSetException.java index 28c38362..9df9c819 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLWorkSpaceNotSetException.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/model/owl/OWLWorkSpaceNotSetException.java @@ -1,4 +1,4 @@ -package edu.ucdenver.ccp.knowtator.model.owl; - -public class OWLWorkSpaceNotSetException extends Exception { -} +package edu.ucdenver.ccp.knowtator.model.owl; + +public class OWLWorkSpaceNotSetException extends Exception { +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/AnnotationClassLabel.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/AnnotationClassLabel.java index 4131792e..c27edbda 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/AnnotationClassLabel.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/AnnotationClassLabel.java @@ -1,49 +1,49 @@ -package edu.ucdenver.ccp.knowtator.view; - -import edu.ucdenver.ccp.knowtator.events.AnnotationChangeEvent; -import edu.ucdenver.ccp.knowtator.listeners.AnnotationSelectionListener; -import edu.ucdenver.ccp.knowtator.model.Annotation; -import edu.ucdenver.ccp.knowtator.model.owl.OWLEntityNullException; -import edu.ucdenver.ccp.knowtator.model.owl.OWLWorkSpaceNotSetException; -import org.apache.log4j.Logger; -import org.protege.editor.owl.model.event.EventType; -import org.protege.editor.owl.model.event.OWLModelManagerChangeEvent; -import org.protege.editor.owl.model.event.OWLModelManagerListener; - -import javax.swing.*; - -public class AnnotationClassLabel extends JLabel - implements AnnotationSelectionListener, OWLModelManagerListener { - - private KnowtatorView view; - @SuppressWarnings("unused") - private Logger log = Logger.getLogger(AnnotationClassLabel.class); - - AnnotationClassLabel(KnowtatorView view) { - this.view = view; - view.getController().getSelectionManager().addAnnotationListener(this); - } - - @Override - public void selectedAnnotationChanged(AnnotationChangeEvent e) { - displayAnnotation(e.getNew()); - } - - private void displayAnnotation(Annotation annotation) { - if (annotation != null) { - try { - setText(view.getController().getOWLAPIDataExtractor().getOWLEntityRendering(annotation.getOwlClass())); - } catch (OWLWorkSpaceNotSetException | OWLEntityNullException e) { - setText(annotation.getOwlClassID()); - } - } - } - - @Override - public void handleChange(OWLModelManagerChangeEvent event) { - if (event.isType(EventType.ENTITY_RENDERER_CHANGED)) { - Annotation annotation = view.getController().getSelectionManager().getSelectedAnnotation(); - displayAnnotation(annotation); - } - } -} +package edu.ucdenver.ccp.knowtator.view; + +import edu.ucdenver.ccp.knowtator.events.AnnotationChangeEvent; +import edu.ucdenver.ccp.knowtator.listeners.AnnotationSelectionListener; +import edu.ucdenver.ccp.knowtator.model.Annotation; +import edu.ucdenver.ccp.knowtator.model.owl.OWLEntityNullException; +import edu.ucdenver.ccp.knowtator.model.owl.OWLWorkSpaceNotSetException; +import org.apache.log4j.Logger; +import org.protege.editor.owl.model.event.EventType; +import org.protege.editor.owl.model.event.OWLModelManagerChangeEvent; +import org.protege.editor.owl.model.event.OWLModelManagerListener; + +import javax.swing.*; + +public class AnnotationClassLabel extends JLabel + implements AnnotationSelectionListener, OWLModelManagerListener { + + private KnowtatorView view; + @SuppressWarnings("unused") + private Logger log = Logger.getLogger(AnnotationClassLabel.class); + + AnnotationClassLabel(KnowtatorView view) { + this.view = view; + view.getController().getSelectionManager().addAnnotationListener(this); + } + + @Override + public void selectedAnnotationChanged(AnnotationChangeEvent e) { + displayAnnotation(e.getNew()); + } + + private void displayAnnotation(Annotation annotation) { + if (annotation != null) { + try { + setText(view.getController().getOWLAPIDataExtractor().getOWLEntityRendering(annotation.getOwlClass())); + } catch (OWLWorkSpaceNotSetException | OWLEntityNullException e) { + setText(annotation.getOwlClassID()); + } + } + } + + @Override + public void handleChange(OWLModelManagerChangeEvent event) { + if (event.isType(EventType.ENTITY_RENDERER_CHANGED)) { + Annotation annotation = view.getController().getSelectionManager().getSelectedAnnotation(); + displayAnnotation(annotation); + } + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/AnnotationIDLabel.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/AnnotationIDLabel.java index 34348bc6..ee61cb65 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/AnnotationIDLabel.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/AnnotationIDLabel.java @@ -1,27 +1,27 @@ -package edu.ucdenver.ccp.knowtator.view; - -import edu.ucdenver.ccp.knowtator.events.AnnotationChangeEvent; -import edu.ucdenver.ccp.knowtator.listeners.AnnotationSelectionListener; -import edu.ucdenver.ccp.knowtator.model.Annotation; - -import javax.swing.*; - -class AnnotationIDLabel extends JLabel implements AnnotationSelectionListener { - - - private KnowtatorView view; - - AnnotationIDLabel(KnowtatorView view) { - - this.view = view; - view.getController().getSelectionManager().addAnnotationListener(this); - } - - @Override - public void selectedAnnotationChanged(AnnotationChangeEvent e) { - Annotation annotation = view.getController().getSelectionManager().getSelectedAnnotation(); - if (annotation != null) { - setText(annotation.getId()); - } - } -} +package edu.ucdenver.ccp.knowtator.view; + +import edu.ucdenver.ccp.knowtator.events.AnnotationChangeEvent; +import edu.ucdenver.ccp.knowtator.listeners.AnnotationSelectionListener; +import edu.ucdenver.ccp.knowtator.model.Annotation; + +import javax.swing.*; + +class AnnotationIDLabel extends JLabel implements AnnotationSelectionListener { + + + private KnowtatorView view; + + AnnotationIDLabel(KnowtatorView view) { + + this.view = view; + view.getController().getSelectionManager().addAnnotationListener(this); + } + + @Override + public void selectedAnnotationChanged(AnnotationChangeEvent e) { + Annotation annotation = view.getController().getSelectionManager().getSelectedAnnotation(); + if (annotation != null) { + setText(annotation.getId()); + } + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/AnnotatorLabel.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/AnnotatorLabel.java index a78b3d3b..e7554ac3 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/AnnotatorLabel.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/AnnotatorLabel.java @@ -1,26 +1,26 @@ -package edu.ucdenver.ccp.knowtator.view; - -import edu.ucdenver.ccp.knowtator.events.AnnotationChangeEvent; -import edu.ucdenver.ccp.knowtator.listeners.AnnotationSelectionListener; -import edu.ucdenver.ccp.knowtator.model.Annotation; - -import javax.swing.*; - -public class AnnotatorLabel extends JLabel implements AnnotationSelectionListener { - - - private KnowtatorView view; - - AnnotatorLabel(KnowtatorView view) { - this.view = view; - view.getController().getSelectionManager().addAnnotationListener(this); - } - - @Override - public void selectedAnnotationChanged(AnnotationChangeEvent e) { - Annotation annotation = view.getController().getSelectionManager().getSelectedAnnotation(); - if (annotation != null) { - setText(annotation.getAnnotator().getId()); - } - } -} +package edu.ucdenver.ccp.knowtator.view; + +import edu.ucdenver.ccp.knowtator.events.AnnotationChangeEvent; +import edu.ucdenver.ccp.knowtator.listeners.AnnotationSelectionListener; +import edu.ucdenver.ccp.knowtator.model.Annotation; + +import javax.swing.*; + +public class AnnotatorLabel extends JLabel implements AnnotationSelectionListener { + + + private KnowtatorView view; + + AnnotatorLabel(KnowtatorView view) { + this.view = view; + view.getController().getSelectionManager().addAnnotationListener(this); + } + + @Override + public void selectedAnnotationChanged(AnnotationChangeEvent e) { + Annotation annotation = view.getController().getSelectionManager().getSelectedAnnotation(); + if (annotation != null) { + setText(annotation.getAnnotator().getId()); + } + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/GraphView.form b/src/main/java/edu/ucdenver/ccp/knowtator/view/GraphView.form index bb158406..25a8070f 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/GraphView.form +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/GraphView.form @@ -1,126 +1,126 @@ - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/GraphView.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/GraphView.java index 97590d4a..93b5cc1e 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/GraphView.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/GraphView.java @@ -1,308 +1,308 @@ -package edu.ucdenver.ccp.knowtator.view; - -import com.mxgraph.layout.hierarchical.mxHierarchicalLayout; -import com.mxgraph.model.mxCell; -import com.mxgraph.swing.mxGraphComponent; -import com.mxgraph.swing.util.mxMorphing; -import com.mxgraph.util.mxEvent; -import com.mxgraph.view.mxGraph; -import edu.ucdenver.ccp.knowtator.events.GraphSpaceChangeEvent; -import edu.ucdenver.ccp.knowtator.listeners.GraphSpaceSelectionListener; -import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; -import edu.ucdenver.ccp.knowtator.model.Annotation; -import edu.ucdenver.ccp.knowtator.model.GraphSpace; -import edu.ucdenver.ccp.knowtator.view.chooser.GraphSpaceChooser; -import edu.ucdenver.ccp.knowtator.view.textpane.GraphViewKnowtatorTextPane; -import org.apache.log4j.Logger; - -import javax.swing.*; -import java.awt.*; -import java.util.List; -import java.util.ResourceBundle; - -public class GraphView extends JPanel implements GraphSpaceSelectionListener, ProjectListener { - private JButton removeCellButton; - private JButton addAnnotationNodeButton; - private JButton applyLayoutButton; - private JButton previousGraphSpaceButton; - private JButton nextGraphSpaceButton; - private mxGraphComponent graphComponent; - private JButton zoomOutButton; - private JButton zoomInButton; - private JPanel panel1; - private GraphSpaceChooser graphSpaceChooser; - private GraphViewKnowtatorTextPane knowtatorTextPane; - private JDialog dialog; - - @SuppressWarnings("unused") - private Logger log = Logger.getLogger(GraphView.class); - - private KnowtatorView view; - - GraphView(JDialog dialog, KnowtatorView view) { - this.dialog = dialog; - this.view = view; - view.getController().getSelectionManager().addGraphSpaceListener(this); - $$$setupUI$$$(); - makeButtons(); - } - - private void createUIComponents() { - JScrollPane scrollPane = new JScrollPane(); - scrollPane.getVerticalScrollBar().setUnitIncrement(20); - graphSpaceChooser = new GraphSpaceChooser(view); - mxGraph testGraph = new mxGraph(); - graphComponent = new mxGraphComponent(testGraph); - - knowtatorTextPane = new GraphViewKnowtatorTextPane(view); - } - - private void makeButtons() { - graphSpaceChooser.addActionListener( - e -> { - JComboBox comboBox = (JComboBox) e.getSource(); - if (comboBox.getSelectedItem() != null - && comboBox.getSelectedItem() - != view.getController().getSelectionManager().getActiveTextSource()) { - view.getController() - .getSelectionManager() - .setSelectedGraphSpace((GraphSpace) comboBox.getSelectedItem()); - } - }); - - zoomOutButton.addActionListener(e -> graphComponent.zoomOut()); - zoomInButton.addActionListener(e -> graphComponent.zoomIn()); - previousGraphSpaceButton.addActionListener( - e -> view.getController().getSelectionManager().getPreviousGraphSpace()); - nextGraphSpaceButton.addActionListener( - e -> view.getController().getSelectionManager().getNextGraphSpace()); - removeCellButton.addActionListener(e -> removeSelectedCell()); - addAnnotationNodeButton.addActionListener( - e -> { - Annotation annotation = - view.getController().getSelectionManager().getSelectedAnnotation(); - mxCell vertex = - view.getController() - .getSelectionManager() - .getActiveGraphSpace() - .addNode(null, annotation); - - goToVertex(vertex); - }); - applyLayoutButton.addActionListener(e -> applyLayout()); - } - - - - @SuppressWarnings("unused") - public void goToAnnotationVertex(GraphSpace graphSpace, Annotation annotation) { - if (annotation != null && graphSpace != null) { - view.getController().getSelectionManager().setSelectedGraphSpace(graphSpace); - List vertices = graphSpace.getVerticesForAnnotation(annotation); - if (vertices.size() > 0) { - graphSpace.setSelectionCells(vertices); - goToVertex(vertices.get(0)); - } - } - } - - private void goToVertex(Object vertex) { - dialog.requestFocusInWindow(); - graphComponent.scrollCellToVisible(vertex, true); - } - - private void showGraph(GraphSpace graphSpace) { - knowtatorTextPane.setText( - graphSpace - .getTextSource() - .getContent() - .substring(graphSpace.getGraphTextStart(), graphSpace.getGraphTextEnd())); - graphComponent.setGraph(graphSpace); - - graphComponent.setName(graphSpace.getId()); - - graphSpace.setupListeners(); - - graphSpace.reDrawGraph(); - applyLayout(); - graphComponent.refresh(); - } - - private void applyLayout() { - GraphSpace graph = view.getController().getSelectionManager().getActiveGraphSpace(); - // graph.reDrawGraph(); - mxHierarchicalLayout layout = new mxHierarchicalLayout(graph); - layout.setOrientation(SwingConstants.WEST); - layout.setIntraCellSpacing(50); - layout.setInterRankCellSpacing(125); - layout.setOrientation(SwingConstants.NORTH); - - try { - graph.getModel().beginUpdate(); - try { - layout.execute(graph.getDefaultParent()); - } finally { - mxMorphing morph = new mxMorphing(graphComponent, 20, 1.2, 20); - - morph.addListener(mxEvent.DONE, (arg0, arg1) -> graph.getModel().endUpdate()); - - morph.startAnimation(); - } - } finally { - graph.getModel().endUpdate(); - graphComponent.zoomAndCenter(); - } - } - - private void removeSelectedCell() { - view.getController().getSelectionManager().getActiveGraphSpace().removeSelectedCell(); - } - - @Override - public void activeGraphSpaceChanged(GraphSpaceChangeEvent e) { - showGraph(view.getController().getSelectionManager().getActiveGraphSpace()); - applyLayout(); - } - - @Override - public void projectClosed() { - graphComponent.setGraph(new mxGraph()); - } - - @Override - public void projectLoaded() { - } - - /** - * Method generated by IntelliJ IDEA GUI Designer - * >>> IMPORTANT!! <<< - * DO NOT edit this method OR call it in your code! - * - * @noinspection ALL - */ - private void $$$setupUI$$$() { - createUIComponents(); - panel1 = new JPanel(); - panel1.setLayout(new BorderLayout(0, 0)); - panel1.setAlignmentX(0.0f); - panel1.setAlignmentY(0.0f); - panel1.setMinimumSize(new Dimension(400, 400)); - final JPanel panel2 = new JPanel(); - panel2.setLayout(new BorderLayout(0, 0)); - panel1.add(panel2, BorderLayout.NORTH); - final JToolBar toolBar1 = new JToolBar(); - toolBar1.setAlignmentX(0.0f); - toolBar1.setAlignmentY(0.0f); - toolBar1.setFloatable(false); - toolBar1.setMinimumSize(new Dimension(630, 100)); - panel2.add(toolBar1, BorderLayout.NORTH); - zoomOutButton = new JButton(); - zoomOutButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-zoom-out-filled-50 (Custom).png"))); - zoomOutButton.setText(""); - zoomOutButton.setToolTipText(ResourceBundle.getBundle("ui").getString("zoom.out")); - toolBar1.add(zoomOutButton); - zoomInButton = new JButton(); - zoomInButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-zoom-in-filled-50 (Custom).png"))); - zoomInButton.setText(""); - zoomInButton.setToolTipText(ResourceBundle.getBundle("ui").getString("zoom.in")); - toolBar1.add(zoomInButton); - removeCellButton = new JButton(); - removeCellButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-minus-50 (Custom).png"))); - removeCellButton.setText(""); - removeCellButton.setToolTipText(ResourceBundle.getBundle("ui").getString("remove.item")); - toolBar1.add(removeCellButton); - addAnnotationNodeButton = new JButton(); - addAnnotationNodeButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-plus-50 (Custom).png"))); - addAnnotationNodeButton.setText(""); - addAnnotationNodeButton.setToolTipText(ResourceBundle.getBundle("ui").getString("add.annotation.node")); - toolBar1.add(addAnnotationNodeButton); - applyLayoutButton = new JButton(); - this.$$$loadButtonText$$$(applyLayoutButton, ResourceBundle.getBundle("ui").getString("apply.layout")); - applyLayoutButton.setToolTipText(ResourceBundle.getBundle("ui").getString("apply.layout1")); - toolBar1.add(applyLayoutButton); - previousGraphSpaceButton = new JButton(); - previousGraphSpaceButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-up-filled-50 (Custom).png"))); - previousGraphSpaceButton.setText(""); - previousGraphSpaceButton.setToolTipText(ResourceBundle.getBundle("ui").getString("previous.graph.space")); - toolBar1.add(previousGraphSpaceButton); - nextGraphSpaceButton = new JButton(); - nextGraphSpaceButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-down-filled-50 (Custom).png"))); - nextGraphSpaceButton.setText(""); - nextGraphSpaceButton.setToolTipText(ResourceBundle.getBundle("ui").getString("next.graph.space")); - toolBar1.add(nextGraphSpaceButton); - final JLabel label1 = new JLabel(); - this.$$$loadLabelText$$$(label1, ResourceBundle.getBundle("ui").getString("graph.space")); - toolBar1.add(label1); - graphSpaceChooser.setMinimumSize(new Dimension(80, 30)); - toolBar1.add(graphSpaceChooser); - final JScrollPane scrollPane1 = new JScrollPane(); - scrollPane1.setMaximumSize(new Dimension(32767, 15)); - panel2.add(scrollPane1, BorderLayout.SOUTH); - knowtatorTextPane.setEditable(false); - knowtatorTextPane.setText(""); - scrollPane1.setViewportView(knowtatorTextPane); - graphComponent.setGridVisible(true); - panel1.add(graphComponent, BorderLayout.CENTER); - } - - /** - * @noinspection ALL - */ - private void $$$loadLabelText$$$(JLabel component, String text) { - StringBuffer result = new StringBuffer(); - boolean haveMnemonic = false; - char mnemonic = '\0'; - int mnemonicIndex = -1; - for (int i = 0; i < text.length(); i++) { - if (text.charAt(i) == '&') { - i++; - if (i == text.length()) break; - if (!haveMnemonic && text.charAt(i) != '&') { - haveMnemonic = true; - mnemonic = text.charAt(i); - mnemonicIndex = result.length(); - } - } - result.append(text.charAt(i)); - } - component.setText(result.toString()); - if (haveMnemonic) { - component.setDisplayedMnemonic(mnemonic); - component.setDisplayedMnemonicIndex(mnemonicIndex); - } - } - - /** - * @noinspection ALL - */ - private void $$$loadButtonText$$$(AbstractButton component, String text) { - StringBuffer result = new StringBuffer(); - boolean haveMnemonic = false; - char mnemonic = '\0'; - int mnemonicIndex = -1; - for (int i = 0; i < text.length(); i++) { - if (text.charAt(i) == '&') { - i++; - if (i == text.length()) break; - if (!haveMnemonic && text.charAt(i) != '&') { - haveMnemonic = true; - mnemonic = text.charAt(i); - mnemonicIndex = result.length(); - } - } - result.append(text.charAt(i)); - } - component.setText(result.toString()); - if (haveMnemonic) { - component.setMnemonic(mnemonic); - component.setDisplayedMnemonicIndex(mnemonicIndex); - } - } - - /** - * @noinspection ALL - */ - public JComponent $$$getRootComponent$$$() { - return panel1; - } -} +package edu.ucdenver.ccp.knowtator.view; + +import com.mxgraph.layout.hierarchical.mxHierarchicalLayout; +import com.mxgraph.model.mxCell; +import com.mxgraph.swing.mxGraphComponent; +import com.mxgraph.swing.util.mxMorphing; +import com.mxgraph.util.mxEvent; +import com.mxgraph.view.mxGraph; +import edu.ucdenver.ccp.knowtator.events.GraphSpaceChangeEvent; +import edu.ucdenver.ccp.knowtator.listeners.GraphSpaceSelectionListener; +import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; +import edu.ucdenver.ccp.knowtator.model.Annotation; +import edu.ucdenver.ccp.knowtator.model.GraphSpace; +import edu.ucdenver.ccp.knowtator.view.chooser.GraphSpaceChooser; +import edu.ucdenver.ccp.knowtator.view.textpane.GraphViewKnowtatorTextPane; +import org.apache.log4j.Logger; + +import javax.swing.*; +import java.awt.*; +import java.util.List; +import java.util.ResourceBundle; + +public class GraphView extends JPanel implements GraphSpaceSelectionListener, ProjectListener { + private JButton removeCellButton; + private JButton addAnnotationNodeButton; + private JButton applyLayoutButton; + private JButton previousGraphSpaceButton; + private JButton nextGraphSpaceButton; + private mxGraphComponent graphComponent; + private JButton zoomOutButton; + private JButton zoomInButton; + private JPanel panel1; + private GraphSpaceChooser graphSpaceChooser; + private GraphViewKnowtatorTextPane knowtatorTextPane; + private JDialog dialog; + + @SuppressWarnings("unused") + private Logger log = Logger.getLogger(GraphView.class); + + private KnowtatorView view; + + GraphView(JDialog dialog, KnowtatorView view) { + this.dialog = dialog; + this.view = view; + view.getController().getSelectionManager().addGraphSpaceListener(this); + $$$setupUI$$$(); + makeButtons(); + } + + private void createUIComponents() { + JScrollPane scrollPane = new JScrollPane(); + scrollPane.getVerticalScrollBar().setUnitIncrement(20); + graphSpaceChooser = new GraphSpaceChooser(view); + mxGraph testGraph = new mxGraph(); + graphComponent = new mxGraphComponent(testGraph); + + knowtatorTextPane = new GraphViewKnowtatorTextPane(view); + } + + private void makeButtons() { + graphSpaceChooser.addActionListener( + e -> { + JComboBox comboBox = (JComboBox) e.getSource(); + if (comboBox.getSelectedItem() != null + && comboBox.getSelectedItem() + != view.getController().getSelectionManager().getActiveTextSource()) { + view.getController() + .getSelectionManager() + .setSelectedGraphSpace((GraphSpace) comboBox.getSelectedItem()); + } + }); + + zoomOutButton.addActionListener(e -> graphComponent.zoomOut()); + zoomInButton.addActionListener(e -> graphComponent.zoomIn()); + previousGraphSpaceButton.addActionListener( + e -> view.getController().getSelectionManager().getPreviousGraphSpace()); + nextGraphSpaceButton.addActionListener( + e -> view.getController().getSelectionManager().getNextGraphSpace()); + removeCellButton.addActionListener(e -> removeSelectedCell()); + addAnnotationNodeButton.addActionListener( + e -> { + Annotation annotation = + view.getController().getSelectionManager().getSelectedAnnotation(); + mxCell vertex = + view.getController() + .getSelectionManager() + .getActiveGraphSpace() + .addNode(null, annotation); + + goToVertex(vertex); + }); + applyLayoutButton.addActionListener(e -> applyLayout()); + } + + + + @SuppressWarnings("unused") + public void goToAnnotationVertex(GraphSpace graphSpace, Annotation annotation) { + if (annotation != null && graphSpace != null) { + view.getController().getSelectionManager().setSelectedGraphSpace(graphSpace); + List vertices = graphSpace.getVerticesForAnnotation(annotation); + if (vertices.size() > 0) { + graphSpace.setSelectionCells(vertices); + goToVertex(vertices.get(0)); + } + } + } + + private void goToVertex(Object vertex) { + dialog.requestFocusInWindow(); + graphComponent.scrollCellToVisible(vertex, true); + } + + private void showGraph(GraphSpace graphSpace) { + knowtatorTextPane.setText( + graphSpace + .getTextSource() + .getContent() + .substring(graphSpace.getGraphTextStart(), graphSpace.getGraphTextEnd())); + graphComponent.setGraph(graphSpace); + + graphComponent.setName(graphSpace.getId()); + + graphSpace.setupListeners(); + + graphSpace.reDrawGraph(); + applyLayout(); + graphComponent.refresh(); + } + + private void applyLayout() { + GraphSpace graph = view.getController().getSelectionManager().getActiveGraphSpace(); + // graph.reDrawGraph(); + mxHierarchicalLayout layout = new mxHierarchicalLayout(graph); + layout.setOrientation(SwingConstants.WEST); + layout.setIntraCellSpacing(50); + layout.setInterRankCellSpacing(125); + layout.setOrientation(SwingConstants.NORTH); + + try { + graph.getModel().beginUpdate(); + try { + layout.execute(graph.getDefaultParent()); + } finally { + mxMorphing morph = new mxMorphing(graphComponent, 20, 1.2, 20); + + morph.addListener(mxEvent.DONE, (arg0, arg1) -> graph.getModel().endUpdate()); + + morph.startAnimation(); + } + } finally { + graph.getModel().endUpdate(); + graphComponent.zoomAndCenter(); + } + } + + private void removeSelectedCell() { + view.getController().getSelectionManager().getActiveGraphSpace().removeSelectedCell(); + } + + @Override + public void activeGraphSpaceChanged(GraphSpaceChangeEvent e) { + showGraph(view.getController().getSelectionManager().getActiveGraphSpace()); + applyLayout(); + } + + @Override + public void projectClosed() { + graphComponent.setGraph(new mxGraph()); + } + + @Override + public void projectLoaded() { + } + + /** + * Method generated by IntelliJ IDEA GUI Designer + * >>> IMPORTANT!! <<< + * DO NOT edit this method OR call it in your code! + * + * @noinspection ALL + */ + private void $$$setupUI$$$() { + createUIComponents(); + panel1 = new JPanel(); + panel1.setLayout(new BorderLayout(0, 0)); + panel1.setAlignmentX(0.0f); + panel1.setAlignmentY(0.0f); + panel1.setMinimumSize(new Dimension(400, 400)); + final JPanel panel2 = new JPanel(); + panel2.setLayout(new BorderLayout(0, 0)); + panel1.add(panel2, BorderLayout.NORTH); + final JToolBar toolBar1 = new JToolBar(); + toolBar1.setAlignmentX(0.0f); + toolBar1.setAlignmentY(0.0f); + toolBar1.setFloatable(false); + toolBar1.setMinimumSize(new Dimension(630, 100)); + panel2.add(toolBar1, BorderLayout.NORTH); + zoomOutButton = new JButton(); + zoomOutButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-zoom-out-filled-50 (Custom).png"))); + zoomOutButton.setText(""); + zoomOutButton.setToolTipText(ResourceBundle.getBundle("ui").getString("zoom.out")); + toolBar1.add(zoomOutButton); + zoomInButton = new JButton(); + zoomInButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-zoom-in-filled-50 (Custom).png"))); + zoomInButton.setText(""); + zoomInButton.setToolTipText(ResourceBundle.getBundle("ui").getString("zoom.in")); + toolBar1.add(zoomInButton); + removeCellButton = new JButton(); + removeCellButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-minus-50 (Custom).png"))); + removeCellButton.setText(""); + removeCellButton.setToolTipText(ResourceBundle.getBundle("ui").getString("remove.item")); + toolBar1.add(removeCellButton); + addAnnotationNodeButton = new JButton(); + addAnnotationNodeButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-plus-50 (Custom).png"))); + addAnnotationNodeButton.setText(""); + addAnnotationNodeButton.setToolTipText(ResourceBundle.getBundle("ui").getString("add.annotation.node")); + toolBar1.add(addAnnotationNodeButton); + applyLayoutButton = new JButton(); + this.$$$loadButtonText$$$(applyLayoutButton, ResourceBundle.getBundle("ui").getString("apply.layout")); + applyLayoutButton.setToolTipText(ResourceBundle.getBundle("ui").getString("apply.layout1")); + toolBar1.add(applyLayoutButton); + previousGraphSpaceButton = new JButton(); + previousGraphSpaceButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-up-filled-50 (Custom).png"))); + previousGraphSpaceButton.setText(""); + previousGraphSpaceButton.setToolTipText(ResourceBundle.getBundle("ui").getString("previous.graph.space")); + toolBar1.add(previousGraphSpaceButton); + nextGraphSpaceButton = new JButton(); + nextGraphSpaceButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-down-filled-50 (Custom).png"))); + nextGraphSpaceButton.setText(""); + nextGraphSpaceButton.setToolTipText(ResourceBundle.getBundle("ui").getString("next.graph.space")); + toolBar1.add(nextGraphSpaceButton); + final JLabel label1 = new JLabel(); + this.$$$loadLabelText$$$(label1, ResourceBundle.getBundle("ui").getString("graph.space")); + toolBar1.add(label1); + graphSpaceChooser.setMinimumSize(new Dimension(80, 30)); + toolBar1.add(graphSpaceChooser); + final JScrollPane scrollPane1 = new JScrollPane(); + scrollPane1.setMaximumSize(new Dimension(32767, 15)); + panel2.add(scrollPane1, BorderLayout.SOUTH); + knowtatorTextPane.setEditable(false); + knowtatorTextPane.setText(""); + scrollPane1.setViewportView(knowtatorTextPane); + graphComponent.setGridVisible(true); + panel1.add(graphComponent, BorderLayout.CENTER); + } + + /** + * @noinspection ALL + */ + private void $$$loadLabelText$$$(JLabel component, String text) { + StringBuffer result = new StringBuffer(); + boolean haveMnemonic = false; + char mnemonic = '\0'; + int mnemonicIndex = -1; + for (int i = 0; i < text.length(); i++) { + if (text.charAt(i) == '&') { + i++; + if (i == text.length()) break; + if (!haveMnemonic && text.charAt(i) != '&') { + haveMnemonic = true; + mnemonic = text.charAt(i); + mnemonicIndex = result.length(); + } + } + result.append(text.charAt(i)); + } + component.setText(result.toString()); + if (haveMnemonic) { + component.setDisplayedMnemonic(mnemonic); + component.setDisplayedMnemonicIndex(mnemonicIndex); + } + } + + /** + * @noinspection ALL + */ + private void $$$loadButtonText$$$(AbstractButton component, String text) { + StringBuffer result = new StringBuffer(); + boolean haveMnemonic = false; + char mnemonic = '\0'; + int mnemonicIndex = -1; + for (int i = 0; i < text.length(); i++) { + if (text.charAt(i) == '&') { + i++; + if (i == text.length()) break; + if (!haveMnemonic && text.charAt(i) != '&') { + haveMnemonic = true; + mnemonic = text.charAt(i); + mnemonicIndex = result.length(); + } + } + result.append(text.charAt(i)); + } + component.setText(result.toString()); + if (haveMnemonic) { + component.setMnemonic(mnemonic); + component.setDisplayedMnemonicIndex(mnemonicIndex); + } + } + + /** + * @noinspection ALL + */ + public JComponent $$$getRootComponent$$$() { + return panel1; + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/GraphViewDialog.form b/src/main/java/edu/ucdenver/ccp/knowtator/view/GraphViewDialog.form index d29c0e6b..b7574bf3 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/GraphViewDialog.form +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/GraphViewDialog.form @@ -1,15 +1,15 @@ - -
    - - - - - - - - - - - - -
    + +
    + + + + + + + + + + + + +
    diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/GraphViewDialog.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/GraphViewDialog.java index 16e08477..e6073336 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/GraphViewDialog.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/GraphViewDialog.java @@ -1,81 +1,81 @@ -package edu.ucdenver.ccp.knowtator.view; - -import edu.ucdenver.ccp.knowtator.view.menu.GraphMenu; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.KeyEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; - -public class GraphViewDialog extends JDialog { - private JPanel contentPane; - private GraphView graphView; - private KnowtatorView view; - - GraphViewDialog(KnowtatorView view) { - - this.view = view; - $$$setupUI$$$(); - setSize(new Dimension(800, 800)); - setLocationRelativeTo(view); - - setContentPane(contentPane); - setModal(false); - - setJMenuBar(new JMenuBar()); - GraphMenu graphMenu = new GraphMenu(view); - getJMenuBar().add(graphMenu); - - // call onCancel() when cross is clicked - setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); - addWindowListener( - new WindowAdapter() { - public void windowClosing(WindowEvent e) { - onCancel(); - } - }); - - // call onCancel() on ESCAPE - contentPane.registerKeyboardAction( - e -> onCancel(), - KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); - } - - private void onCancel() { - // add your code here if necessary - dispose(); - } - - private void createUIComponents() { - graphView = new GraphView(this, view); - } - - /** - * Method generated by IntelliJ IDEA GUI Designer >>> IMPORTANT!! <<< DO NOT edit this method OR - * call it in your code! - * - * @noinspection ALL - */ - private void $$$setupUI$$$() { - createUIComponents(); - contentPane = new JPanel(); - contentPane.setLayout(new BorderLayout(0, 0)); - contentPane.add(graphView.$$$getRootComponent$$$(), BorderLayout.CENTER); - } - - /** - * @noinspection ALL - */ - public JComponent $$$getRootComponent$$$() { - return contentPane; - } - - // public static void main(String[] args) { - // GraphViewDialog dialog = new GraphViewDialog(); - // dialog.pack(); - // dialog.setVisible(true); - // System.exit(0); - // } -} +package edu.ucdenver.ccp.knowtator.view; + +import edu.ucdenver.ccp.knowtator.view.menu.GraphMenu; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; + +public class GraphViewDialog extends JDialog { + private JPanel contentPane; + private GraphView graphView; + private KnowtatorView view; + + GraphViewDialog(KnowtatorView view) { + + this.view = view; + $$$setupUI$$$(); + setSize(new Dimension(800, 800)); + setLocationRelativeTo(view); + + setContentPane(contentPane); + setModal(false); + + setJMenuBar(new JMenuBar()); + GraphMenu graphMenu = new GraphMenu(view); + getJMenuBar().add(graphMenu); + + // call onCancel() when cross is clicked + setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + addWindowListener( + new WindowAdapter() { + public void windowClosing(WindowEvent e) { + onCancel(); + } + }); + + // call onCancel() on ESCAPE + contentPane.registerKeyboardAction( + e -> onCancel(), + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), + JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + } + + private void onCancel() { + // add your code here if necessary + dispose(); + } + + private void createUIComponents() { + graphView = new GraphView(this, view); + } + + /** + * Method generated by IntelliJ IDEA GUI Designer >>> IMPORTANT!! <<< DO NOT edit this method OR + * call it in your code! + * + * @noinspection ALL + */ + private void $$$setupUI$$$() { + createUIComponents(); + contentPane = new JPanel(); + contentPane.setLayout(new BorderLayout(0, 0)); + contentPane.add(graphView.$$$getRootComponent$$$(), BorderLayout.CENTER); + } + + /** + * @noinspection ALL + */ + public JComponent $$$getRootComponent$$$() { + return contentPane; + } + + // public static void main(String[] args) { + // GraphViewDialog dialog = new GraphViewDialog(); + // dialog.pack(); + // dialog.setVisible(true); + // System.exit(0); + // } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/KnowtatorView.form b/src/main/java/edu/ucdenver/ccp/knowtator/view/KnowtatorView.form index 9c340088..91b06cca 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/KnowtatorView.form +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/KnowtatorView.form @@ -1,379 +1,379 @@ - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/KnowtatorView.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/KnowtatorView.java index f0ed9906..a54e1f1b 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/KnowtatorView.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/KnowtatorView.java @@ -1,676 +1,676 @@ -package edu.ucdenver.ccp.knowtator.view; - -import com.mxgraph.swing.util.mxGraphTransferable; -import edu.ucdenver.ccp.knowtator.KnowtatorController; -import edu.ucdenver.ccp.knowtator.listeners.OWLClassSelectionListener; -import edu.ucdenver.ccp.knowtator.listeners.OWLObjectPropertySelectionListener; -import edu.ucdenver.ccp.knowtator.model.Profile; -import edu.ucdenver.ccp.knowtator.model.Span; -import edu.ucdenver.ccp.knowtator.model.TextSource; -import edu.ucdenver.ccp.knowtator.model.owl.OWLWorkSpaceNotSetException; -import edu.ucdenver.ccp.knowtator.view.chooser.ProfileChooser; -import edu.ucdenver.ccp.knowtator.view.chooser.TextSourceChooser; -import edu.ucdenver.ccp.knowtator.view.menu.ProjectMenu; -import edu.ucdenver.ccp.knowtator.view.textpane.KnowtatorTextPane; -import edu.ucdenver.ccp.knowtator.view.textpane.MainKnowtatorTextPane; -import org.apache.log4j.Logger; -import org.protege.editor.owl.model.OWLWorkspace; -import org.protege.editor.owl.ui.view.cls.AbstractOWLClassViewComponent; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLEntity; -import org.semanticweb.owlapi.model.OWLObjectProperty; - -import javax.swing.*; -import java.awt.*; -import java.awt.datatransfer.DataFlavor; -import java.awt.dnd.*; -import java.awt.event.ActionEvent; -import java.util.ResourceBundle; -import java.util.Set; - -public class KnowtatorView extends AbstractOWLClassViewComponent - implements DropTargetListener, OWLClassSelectionListener, OWLObjectPropertySelectionListener { - - private static final Logger log = Logger.getLogger(KnowtatorView.class); - private KnowtatorController controller; - private GraphViewDialog graphViewDialog; - private JMenu projectMenu; - private JComponent panel1; - private JButton previousMatchButton; - private JButton nextMatchButton; - private JTextField matchTextField; - private JCheckBox caseSensitiveCheckBox; - private JCheckBox regexCheckBox; - private JButton showGraphViewerButton; - private JButton removeAnnotationButton; - private JButton growSelectionStartButton; - private JButton shrinkSelectionEndButton; - private JButton growSelectionEndButton; - private JButton shrinkSelectionStartButton; - private JButton addAnnotationButton; - private JButton decreaseFontSizeButton; - private JButton increaseFontSizeButton; - private JButton previousTextSourceButton; - private JButton nextTextSourceButton; - private JButton nextSpanButton; - private JButton previousSpanButton; - private JButton assignColorToClassButton; - private JCheckBox profileFilterCheckBox; - private KnowtatorTextPane knowtatorTextPane; - private JToolBar textSourceToolBar; - private JToolBar annotationToolBar; - private JPanel findPanel; - private JPanel textPanel; - private JSplitPane infoPane; - private JSplitPane mainPane; - private JPanel infoPanel; - private JLabel infoPanelTitleLabel; - private SpanList spanList; - private AnnotatorLabel annotatorLabel; - private AnnotationIDLabel annotationIDLabel; - private AnnotationClassLabel annotationClassLabel; - private TextSourceChooser textSourceChooser; - private ProfileChooser profileChooser; - private JButton textToGraphButton; - private JButton findTextButton; - - public KnowtatorView() { - makeController(); - $$$setupUI$$$(); - makeButtons(); - - controller.getSelectionManager().addOWLClassListener(this); - controller.getSelectionManager().addOWLObjectPropertyListener(this); - - // This is necessary to force OSGI to load the mxGraphTransferable class to allow node dragging. - // It is kind of a hacky fix, but it works for now. - - log.warn("Don't worry about the following exception. Just forcing loading of a class needed by mxGraph"); - try { - mxGraphTransferable.dataFlavor = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType + "; class=com.mxgraph.swing.util.mxGraphTransferable", null, mxGraphTransferable.class.getClassLoader()); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - } - - private void makeController() { - log.warn("KnowtatorView: Making controller"); - controller = new KnowtatorController(); - - setUpOWL(); - } - - private void setUpOWL() { - OWLWorkspace workspace = null; - try { - workspace = controller.getOWLAPIDataExtractor().getWorkSpace(); - } catch (OWLWorkSpaceNotSetException ignored) { - - } - if (workspace == null) { - if (getOWLWorkspace() != null) { - controller.getOWLAPIDataExtractor().setUpOWL(getOWLWorkspace()); - log.warn("Adding class label as renderer listener"); - getOWLWorkspace().getOWLModelManager().addListener(annotationClassLabel); - } - } - - } - - public KnowtatorController getController() { - return controller; - } - - @Override - public void initialiseClassView() { - } - - private void createUIComponents() { - DropTarget dt = new DropTarget(this, this); - dt.setActive(true); - - panel1 = this; - projectMenu = new ProjectMenu(this); - knowtatorTextPane = new MainKnowtatorTextPane(this); - graphViewDialog = new GraphViewDialog(this); - annotationIDLabel = new AnnotationIDLabel(this); - annotationClassLabel = new AnnotationClassLabel(this); - annotatorLabel = new AnnotatorLabel(this); - spanList = new SpanList(this); - textSourceChooser = new TextSourceChooser(this); - profileChooser = new ProfileChooser(this); - } - - private void makeButtons() { - - findTextButton.addActionListener(e -> { - try { - controller.getOWLAPIDataExtractor().searchForString(knowtatorTextPane.getSelectedText()); - } catch (OWLWorkSpaceNotSetException ignored) { - - } - }); - - assignColorToClassButton.addActionListener( - e -> { - OWLClass owlClass = controller.getSelectionManager().getSelectedOWLClass(); - if (owlClass == null) { - if (controller.getProjectManager().isProjectLoaded()) { - owlClass = controller.getSelectionManager().getSelectedAnnotation().getOwlClass(); - } - } - if (owlClass != null) { - Color c = JColorChooser.showDialog(this, "Pick a color for " + owlClass, Color.CYAN); - if (c != null) { - controller.getSelectionManager().getActiveProfile().addColor(owlClass, c); - - if (JOptionPane.showConfirmDialog( - this, "Assign color to descendants of " + owlClass + "?") - == JOptionPane.OK_OPTION) { - try { - Set descendants = - controller.getOWLAPIDataExtractor().getDescendants(owlClass); - - for (OWLClass descendant : descendants) { - controller.getSelectionManager().getActiveProfile().addColor(descendant, c); - } - } catch (OWLWorkSpaceNotSetException ignored) { - } - } - } - } - }); - - profileFilterCheckBox.addChangeListener(controller.getSelectionManager()); - - growSelectionStartButton.addActionListener( - (ActionEvent e) -> { - if (controller.getSelectionManager().getSelectedSpan() == null) { - knowtatorTextPane.growStart(); - } else { - controller - .getSelectionManager() - .getActiveTextSource() - .getAnnotationManager() - .growSelectedSpanStart(); - } - }); - shrinkSelectionStartButton.addActionListener( - (ActionEvent e) -> { - if (controller.getSelectionManager().getSelectedSpan() == null) { - knowtatorTextPane.shrinkStart(); - } else { - controller - .getSelectionManager() - .getActiveTextSource() - .getAnnotationManager() - .shrinkSelectedSpanStart(); - } - }); - shrinkSelectionEndButton.addActionListener( - (ActionEvent e) -> { - if (controller.getSelectionManager().getSelectedSpan() == null) { - knowtatorTextPane.shrinkEnd(); - } else { - controller - .getSelectionManager() - .getActiveTextSource() - .getAnnotationManager() - .shrinkSelectedSpanEnd(); - } - }); - growSelectionEndButton.addActionListener( - (ActionEvent e) -> { - if (controller.getSelectionManager().getSelectedSpan() == null) { - knowtatorTextPane.growEnd(); - } else { - controller - .getSelectionManager() - .getActiveTextSource() - .getAnnotationManager() - .growSelectedSpanEnd(); - } - }); - - previousSpanButton.addActionListener( - (ActionEvent e) -> controller.getSelectionManager().getPreviousSpan()); - nextSpanButton.addActionListener( - (ActionEvent e) -> controller.getSelectionManager().getNextSpan()); - - showGraphViewerButton.addActionListener(e -> graphViewDialog.setVisible(true)); - - removeAnnotationButton.addActionListener( - e -> { - if (controller.getProjectManager().isProjectLoaded() - && JOptionPane.showConfirmDialog( - this, - "Are you sure you want to remove the selected annotation?", - "Remove Annotation", - JOptionPane.YES_NO_OPTION) - == JOptionPane.YES_OPTION) { - controller - .getSelectionManager() - .getActiveTextSource() - .getAnnotationManager() - .removeSelectedAnnotation(); - } - }); - addAnnotationButton.addActionListener( - e -> { - if (controller.getProjectManager().isProjectLoaded()) { - controller - .getSelectionManager() - .getActiveTextSource() - .getAnnotationManager() - .addSelectedAnnotation(); - } - }); - - previousTextSourceButton.addActionListener( - e -> controller.getSelectionManager().getPreviousTextSource()); - nextTextSourceButton.addActionListener( - e -> controller.getSelectionManager().getNextTextSource()); - - decreaseFontSizeButton.addActionListener( - (ActionEvent e) -> knowtatorTextPane.decreaseFontSize()); - increaseFontSizeButton.addActionListener( - (ActionEvent e) -> knowtatorTextPane.increaseFindSize()); - textSourceChooser.addActionListener( - e -> { - JComboBox comboBox = (JComboBox) e.getSource(); - if (comboBox.getSelectedItem() != null) { - controller.getSelectionManager().setSelectedTextSource((TextSource) comboBox.getSelectedItem()); - } - }); - profileChooser.addActionListener( - e -> { - JComboBox comboBox = (JComboBox) e.getSource(); - if (comboBox.getSelectedItem() != null) { - controller.getSelectionManager().setSelectedProfile((Profile) comboBox.getSelectedItem()); - } - }); - spanList.addListSelectionListener( - e -> { - JList jList = (JList) e.getSource(); - if (jList.getSelectedValue() != null) { - controller.getSelectionManager().setSelectedSpan((Span) jList.getSelectedValue()); - } - }); - nextMatchButton.addActionListener( - e -> { - String textToFind = matchTextField.getText(); - KnowtatorTextPane currentKnowtatorTextPane = getKnowtatorTextPane(); - String textToSearch = currentKnowtatorTextPane.getText(); - if (!caseSensitiveCheckBox.isSelected()) { - textToSearch = textToSearch.toLowerCase(); - } - int matchLoc = - textToSearch.indexOf(textToFind, currentKnowtatorTextPane.getSelectionStart() + 1); - if (matchLoc != -1) { - currentKnowtatorTextPane.requestFocusInWindow(); - currentKnowtatorTextPane.select(matchLoc, matchLoc + textToFind.length()); - } else { - currentKnowtatorTextPane.setSelectionStart(textToSearch.length()); - } - }); - previousMatchButton.addActionListener( - e -> { - String textToFind = matchTextField.getText(); - String textToSearch = knowtatorTextPane.getText(); - if (!caseSensitiveCheckBox.isSelected()) { - textToSearch = textToSearch.toLowerCase(); - } - int matchLoc = - textToSearch.lastIndexOf(textToFind, knowtatorTextPane.getSelectionStart() - 1); - if (matchLoc != -1) { - knowtatorTextPane.requestFocusInWindow(); - knowtatorTextPane.select(matchLoc, matchLoc + textToFind.length()); - } else { - knowtatorTextPane.setSelectionStart(-1); - } - }); - - textToGraphButton.addActionListener( - e -> { - if (controller.getProjectManager().isProjectLoaded()) { - controller - .getSelectionManager() - .getActiveGraphSpace() - .setGraphText( - knowtatorTextPane.getSelectionStart(), knowtatorTextPane.getSelectionEnd()); - } - }); - } - - private void owlEntitySelectionChanged(OWLEntity owlEntity) { - if (getView() != null) { - if (getView().isSyncronizing()) { - getOWLWorkspace().getOWLSelectionModel().setSelectedEntity(owlEntity); - } - } - } - - @Override - protected OWLClass updateView(OWLClass selectedClass) { - setUpOWL(); - controller.getSelectionManager().setSelectedOWLClass(selectedClass); - return selectedClass; - } - - @Override - public void disposeView() { - if (controller.getProjectManager().isProjectLoaded() - && JOptionPane.showConfirmDialog( - this, - "Save changes to Knowtator project?", - "Save Project", - JOptionPane.YES_NO_OPTION) - == JOptionPane.YES_OPTION) { - controller.getProjectManager().saveProject(); - } - } - - @Override - public void dropActionChanged(DropTargetDragEvent e) { - } - - @Override - public void dragExit(DropTargetEvent e) { - } - - @Override - public void drop(DropTargetDropEvent e) { - } - - public KnowtatorTextPane getKnowtatorTextPane() { - return knowtatorTextPane; - } - - @Override - public void dragEnter(DropTargetDragEvent e) { - } - - @Override - public void dragOver(DropTargetDragEvent e) { - } - - public JMenu getProjectMenu() { - return projectMenu; - } - - public GraphViewDialog getGraphViewDialog() { - return graphViewDialog; - } - - - @Override - public void owlClassChanged(OWLClass owlClass) { - owlEntitySelectionChanged(owlClass); - } - - @Override - public void owlObjectPropertyChanged(OWLObjectProperty owlObjectProperty) { - owlEntitySelectionChanged(owlObjectProperty); - } - - /** - * Method generated by IntelliJ IDEA GUI Designer - * >>> IMPORTANT!! <<< - * DO NOT edit this method OR call it in your code! - * - * @noinspection ALL - */ - private void $$$setupUI$$$() { - createUIComponents(); - panel1.setLayout(new BorderLayout(0, 0)); - mainPane = new JSplitPane(); - mainPane.setDividerLocation(1536); - mainPane.setOneTouchExpandable(true); - panel1.add(mainPane, BorderLayout.CENTER); - infoPane = new JSplitPane(); - infoPane.setOrientation(0); - mainPane.setRightComponent(infoPane); - findPanel = new JPanel(); - findPanel.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(2, 3, new Insets(0, 0, 0, 0), -1, -1)); - infoPane.setLeftComponent(findPanel); - findPanel.setBorder(BorderFactory.createTitledBorder(ResourceBundle.getBundle("ui").getString("find"))); - nextMatchButton = new JButton(); - this.$$$loadButtonText$$$(nextMatchButton, ResourceBundle.getBundle("ui").getString("next")); - findPanel.add(nextMatchButton, new com.intellij.uiDesigner.core.GridConstraints(0, 2, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_HORIZONTAL, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - previousMatchButton = new JButton(); - this.$$$loadButtonText$$$(previousMatchButton, ResourceBundle.getBundle("ui").getString("previous")); - findPanel.add(previousMatchButton, new com.intellij.uiDesigner.core.GridConstraints(0, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_HORIZONTAL, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - matchTextField = new JTextField(); - findPanel.add(matchTextField, new com.intellij.uiDesigner.core.GridConstraints(0, 1, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_HORIZONTAL, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); - caseSensitiveCheckBox = new JCheckBox(); - this.$$$loadButtonText$$$(caseSensitiveCheckBox, ResourceBundle.getBundle("ui").getString("case.sensitive")); - findPanel.add(caseSensitiveCheckBox, new com.intellij.uiDesigner.core.GridConstraints(1, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - regexCheckBox = new JCheckBox(); - this.$$$loadButtonText$$$(regexCheckBox, ResourceBundle.getBundle("ui").getString("regex")); - findPanel.add(regexCheckBox, new com.intellij.uiDesigner.core.GridConstraints(1, 1, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - infoPanel = new JPanel(); - infoPanel.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(5, 1, new Insets(0, 0, 0, 0), -1, -1)); - infoPane.setRightComponent(infoPanel); - infoPanelTitleLabel = new JLabel(); - Font infoPanelTitleLabelFont = this.$$$getFont$$$(null, Font.BOLD, 18, infoPanelTitleLabel.getFont()); - if (infoPanelTitleLabelFont != null) infoPanelTitleLabel.setFont(infoPanelTitleLabelFont); - infoPanelTitleLabel.setHorizontalAlignment(0); - infoPanelTitleLabel.setHorizontalTextPosition(0); - this.$$$loadLabelText$$$(infoPanelTitleLabel, ResourceBundle.getBundle("ui").getString("annotation.information")); - infoPanelTitleLabel.setVerticalAlignment(0); - infoPanelTitleLabel.setVerticalTextPosition(0); - infoPanel.add(infoPanelTitleLabel, new com.intellij.uiDesigner.core.GridConstraints(0, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); - final JScrollPane scrollPane1 = new JScrollPane(); - infoPanel.add(scrollPane1, new com.intellij.uiDesigner.core.GridConstraints(4, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_BOTH, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false)); - scrollPane1.setViewportView(spanList); - annotationIDLabel.setHorizontalAlignment(2); - annotationIDLabel.setHorizontalTextPosition(2); - annotationIDLabel.setVerticalAlignment(1); - annotationIDLabel.setVerticalTextPosition(1); - infoPanel.add(annotationIDLabel, new com.intellij.uiDesigner.core.GridConstraints(1, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_NORTHWEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); - annotationClassLabel.setHorizontalAlignment(2); - annotationClassLabel.setHorizontalTextPosition(2); - annotationClassLabel.setVerticalAlignment(1); - annotationClassLabel.setVerticalTextPosition(1); - infoPanel.add(annotationClassLabel, new com.intellij.uiDesigner.core.GridConstraints(2, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_NORTHWEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); - annotatorLabel.setHorizontalAlignment(2); - annotatorLabel.setHorizontalTextPosition(2); - annotatorLabel.setVerticalAlignment(1); - annotatorLabel.setVerticalTextPosition(1); - infoPanel.add(annotatorLabel, new com.intellij.uiDesigner.core.GridConstraints(3, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_NORTHWEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); - textPanel = new JPanel(); - textPanel.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(3, 1, new Insets(0, 0, 0, 0), -1, -1)); - mainPane.setLeftComponent(textPanel); - textPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(new Color(-16777216)), null)); - textSourceToolBar = new JToolBar(); - textSourceToolBar.setFloatable(false); - textPanel.add(textSourceToolBar, new com.intellij.uiDesigner.core.GridConstraints(0, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_HORIZONTAL, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(-1, 20), null, 0, false)); - decreaseFontSizeButton = new JButton(); - decreaseFontSizeButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-Decrease Font (Custom).png"))); - decreaseFontSizeButton.setText(""); - decreaseFontSizeButton.setToolTipText(ResourceBundle.getBundle("ui").getString("decrease.font.size")); - textSourceToolBar.add(decreaseFontSizeButton); - increaseFontSizeButton = new JButton(); - increaseFontSizeButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-Increase Font (Custom).png"))); - increaseFontSizeButton.setText(""); - increaseFontSizeButton.setToolTipText(ResourceBundle.getBundle("ui").getString("increase.font.size")); - textSourceToolBar.add(increaseFontSizeButton); - previousTextSourceButton = new JButton(); - previousTextSourceButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-up-filled-50 (Custom).png"))); - previousTextSourceButton.setText(""); - previousTextSourceButton.setToolTipText(ResourceBundle.getBundle("ui").getString("previous.text.source")); - textSourceToolBar.add(previousTextSourceButton); - nextTextSourceButton = new JButton(); - nextTextSourceButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-down-filled-50 (Custom).png"))); - nextTextSourceButton.setText(""); - nextTextSourceButton.setToolTipText(ResourceBundle.getBundle("ui").getString("next.text.source")); - textSourceToolBar.add(nextTextSourceButton); - final JLabel label1 = new JLabel(); - this.$$$loadLabelText$$$(label1, ResourceBundle.getBundle("ui").getString("document")); - textSourceToolBar.add(label1); - textSourceToolBar.add(textSourceChooser); - final JLabel label2 = new JLabel(); - this.$$$loadLabelText$$$(label2, ResourceBundle.getBundle("ui").getString("profile")); - textSourceToolBar.add(label2); - textSourceToolBar.add(profileChooser); - annotationToolBar = new JToolBar(); - annotationToolBar.setFloatable(false); - textPanel.add(annotationToolBar, new com.intellij.uiDesigner.core.GridConstraints(1, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_HORIZONTAL, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(-1, 20), null, 0, false)); - showGraphViewerButton = new JButton(); - showGraphViewerButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-edit-node-50 (Custom).png"))); - showGraphViewerButton.setText(""); - showGraphViewerButton.setToolTipText(ResourceBundle.getBundle("ui").getString("show.graph.viewer")); - annotationToolBar.add(showGraphViewerButton); - textToGraphButton = new JButton(); - this.$$$loadButtonText$$$(textToGraphButton, ResourceBundle.getBundle("ui").getString("text.to.graph")); - textToGraphButton.setToolTipText(ResourceBundle.getBundle("ui").getString("send.selected.text.to.graph")); - annotationToolBar.add(textToGraphButton); - findTextButton = new JButton(); - this.$$$loadButtonText$$$(findTextButton, ResourceBundle.getBundle("log4j").getString("find.in.ontology")); - annotationToolBar.add(findTextButton); - addAnnotationButton = new JButton(); - addAnnotationButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-plus-50 (Custom).png"))); - addAnnotationButton.setText(""); - addAnnotationButton.setToolTipText(ResourceBundle.getBundle("ui").getString("add.annotation")); - annotationToolBar.add(addAnnotationButton); - removeAnnotationButton = new JButton(); - removeAnnotationButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-minus-50 (Custom).png"))); - removeAnnotationButton.setText(""); - removeAnnotationButton.setToolTipText(ResourceBundle.getBundle("ui").getString("remove.annotation")); - annotationToolBar.add(removeAnnotationButton); - previousSpanButton = new JButton(); - previousSpanButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-left-filled-50 (Custom).png"))); - previousSpanButton.setText(""); - previousSpanButton.setToolTipText(ResourceBundle.getBundle("ui").getString("previous.span")); - annotationToolBar.add(previousSpanButton); - growSelectionStartButton = new JButton(); - growSelectionStartButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-back-50 (Custom).png"))); - growSelectionStartButton.setText(""); - growSelectionStartButton.setToolTipText(ResourceBundle.getBundle("ui").getString("grow.selection.start")); - annotationToolBar.add(growSelectionStartButton); - shrinkSelectionStartButton = new JButton(); - shrinkSelectionStartButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-forward-50 (Custom).png"))); - shrinkSelectionStartButton.setText(""); - shrinkSelectionStartButton.setToolTipText(ResourceBundle.getBundle("ui").getString("shrink.selection.start")); - annotationToolBar.add(shrinkSelectionStartButton); - shrinkSelectionEndButton = new JButton(); - shrinkSelectionEndButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-back-50 (Custom).png"))); - shrinkSelectionEndButton.setText(""); - shrinkSelectionEndButton.setToolTipText(ResourceBundle.getBundle("ui").getString("shrink.selection.end")); - annotationToolBar.add(shrinkSelectionEndButton); - growSelectionEndButton = new JButton(); - growSelectionEndButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-forward-50 (Custom).png"))); - growSelectionEndButton.setText(""); - growSelectionEndButton.setToolTipText(ResourceBundle.getBundle("ui").getString("grow.selection.end")); - annotationToolBar.add(growSelectionEndButton); - nextSpanButton = new JButton(); - nextSpanButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-right-filled-50 (Custom).png"))); - nextSpanButton.setText(""); - nextSpanButton.setToolTipText(ResourceBundle.getBundle("ui").getString("next.span")); - annotationToolBar.add(nextSpanButton); - assignColorToClassButton = new JButton(); - assignColorToClassButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-color-dropper-filled-50 (Custom).png"))); - assignColorToClassButton.setText(""); - assignColorToClassButton.setToolTipText(ResourceBundle.getBundle("ui").getString("assign.color.to.class")); - annotationToolBar.add(assignColorToClassButton); - profileFilterCheckBox = new JCheckBox(); - this.$$$loadButtonText$$$(profileFilterCheckBox, ResourceBundle.getBundle("ui").getString("profile.filter")); - profileFilterCheckBox.setToolTipText(ResourceBundle.getBundle("ui").getString("filter.annotations.by.profile")); - annotationToolBar.add(profileFilterCheckBox); - final JScrollPane scrollPane2 = new JScrollPane(); - textPanel.add(scrollPane2, new com.intellij.uiDesigner.core.GridConstraints(2, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_BOTH, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false)); - knowtatorTextPane.setBackground(new Color(-1)); - knowtatorTextPane.setEditable(false); - knowtatorTextPane.setFocusTraversalPolicyProvider(true); - knowtatorTextPane.setFocusable(false); - knowtatorTextPane.setForeground(new Color(-16777216)); - knowtatorTextPane.setText(""); - scrollPane2.setViewportView(knowtatorTextPane); - final JMenuBar menuBar1 = new JMenuBar(); - menuBar1.setLayout(new BorderLayout(0, 0)); - panel1.add(menuBar1, BorderLayout.NORTH); - projectMenu.setSelected(false); - this.$$$loadButtonText$$$(projectMenu, ResourceBundle.getBundle("ui").getString("knowator.project")); - menuBar1.add(projectMenu, BorderLayout.WEST); - } - - /** - * @noinspection ALL - */ - private Font $$$getFont$$$(String fontName, int style, int size, Font currentFont) { - if (currentFont == null) return null; - String resultName; - if (fontName == null) { - resultName = currentFont.getName(); - } else { - Font testFont = new Font(fontName, Font.PLAIN, 10); - if (testFont.canDisplay('a') && testFont.canDisplay('1')) { - resultName = fontName; - } else { - resultName = currentFont.getName(); - } - } - return new Font(resultName, style >= 0 ? style : currentFont.getStyle(), size >= 0 ? size : currentFont.getSize()); - } - - /** - * @noinspection ALL - */ - private void $$$loadLabelText$$$(JLabel component, String text) { - StringBuffer result = new StringBuffer(); - boolean haveMnemonic = false; - char mnemonic = '\0'; - int mnemonicIndex = -1; - for (int i = 0; i < text.length(); i++) { - if (text.charAt(i) == '&') { - i++; - if (i == text.length()) break; - if (!haveMnemonic && text.charAt(i) != '&') { - haveMnemonic = true; - mnemonic = text.charAt(i); - mnemonicIndex = result.length(); - } - } - result.append(text.charAt(i)); - } - component.setText(result.toString()); - if (haveMnemonic) { - component.setDisplayedMnemonic(mnemonic); - component.setDisplayedMnemonicIndex(mnemonicIndex); - } - } - - /** - * @noinspection ALL - */ - private void $$$loadButtonText$$$(AbstractButton component, String text) { - StringBuffer result = new StringBuffer(); - boolean haveMnemonic = false; - char mnemonic = '\0'; - int mnemonicIndex = -1; - for (int i = 0; i < text.length(); i++) { - if (text.charAt(i) == '&') { - i++; - if (i == text.length()) break; - if (!haveMnemonic && text.charAt(i) != '&') { - haveMnemonic = true; - mnemonic = text.charAt(i); - mnemonicIndex = result.length(); - } - } - result.append(text.charAt(i)); - } - component.setText(result.toString()); - if (haveMnemonic) { - component.setMnemonic(mnemonic); - component.setDisplayedMnemonicIndex(mnemonicIndex); - } - } - - /** - * @noinspection ALL - */ - public JComponent $$$getRootComponent$$$() { - return panel1; - } -} +package edu.ucdenver.ccp.knowtator.view; + +import com.mxgraph.swing.util.mxGraphTransferable; +import edu.ucdenver.ccp.knowtator.KnowtatorController; +import edu.ucdenver.ccp.knowtator.listeners.OWLClassSelectionListener; +import edu.ucdenver.ccp.knowtator.listeners.OWLObjectPropertySelectionListener; +import edu.ucdenver.ccp.knowtator.model.Profile; +import edu.ucdenver.ccp.knowtator.model.Span; +import edu.ucdenver.ccp.knowtator.model.TextSource; +import edu.ucdenver.ccp.knowtator.model.owl.OWLWorkSpaceNotSetException; +import edu.ucdenver.ccp.knowtator.view.chooser.ProfileChooser; +import edu.ucdenver.ccp.knowtator.view.chooser.TextSourceChooser; +import edu.ucdenver.ccp.knowtator.view.menu.ProjectMenu; +import edu.ucdenver.ccp.knowtator.view.textpane.KnowtatorTextPane; +import edu.ucdenver.ccp.knowtator.view.textpane.MainKnowtatorTextPane; +import org.apache.log4j.Logger; +import org.protege.editor.owl.model.OWLWorkspace; +import org.protege.editor.owl.ui.view.cls.AbstractOWLClassViewComponent; +import org.semanticweb.owlapi.model.OWLClass; +import org.semanticweb.owlapi.model.OWLEntity; +import org.semanticweb.owlapi.model.OWLObjectProperty; + +import javax.swing.*; +import java.awt.*; +import java.awt.datatransfer.DataFlavor; +import java.awt.dnd.*; +import java.awt.event.ActionEvent; +import java.util.ResourceBundle; +import java.util.Set; + +public class KnowtatorView extends AbstractOWLClassViewComponent + implements DropTargetListener, OWLClassSelectionListener, OWLObjectPropertySelectionListener { + + private static final Logger log = Logger.getLogger(KnowtatorView.class); + private KnowtatorController controller; + private GraphViewDialog graphViewDialog; + private JMenu projectMenu; + private JComponent panel1; + private JButton previousMatchButton; + private JButton nextMatchButton; + private JTextField matchTextField; + private JCheckBox caseSensitiveCheckBox; + private JCheckBox regexCheckBox; + private JButton showGraphViewerButton; + private JButton removeAnnotationButton; + private JButton growSelectionStartButton; + private JButton shrinkSelectionEndButton; + private JButton growSelectionEndButton; + private JButton shrinkSelectionStartButton; + private JButton addAnnotationButton; + private JButton decreaseFontSizeButton; + private JButton increaseFontSizeButton; + private JButton previousTextSourceButton; + private JButton nextTextSourceButton; + private JButton nextSpanButton; + private JButton previousSpanButton; + private JButton assignColorToClassButton; + private JCheckBox profileFilterCheckBox; + private KnowtatorTextPane knowtatorTextPane; + private JToolBar textSourceToolBar; + private JToolBar annotationToolBar; + private JPanel findPanel; + private JPanel textPanel; + private JSplitPane infoPane; + private JSplitPane mainPane; + private JPanel infoPanel; + private JLabel infoPanelTitleLabel; + private SpanList spanList; + private AnnotatorLabel annotatorLabel; + private AnnotationIDLabel annotationIDLabel; + private AnnotationClassLabel annotationClassLabel; + private TextSourceChooser textSourceChooser; + private ProfileChooser profileChooser; + private JButton textToGraphButton; + private JButton findTextButton; + + public KnowtatorView() { + makeController(); + $$$setupUI$$$(); + makeButtons(); + + controller.getSelectionManager().addOWLClassListener(this); + controller.getSelectionManager().addOWLObjectPropertyListener(this); + + // This is necessary to force OSGI to load the mxGraphTransferable class to allow node dragging. + // It is kind of a hacky fix, but it works for now. + + log.warn("Don't worry about the following exception. Just forcing loading of a class needed by mxGraph"); + try { + mxGraphTransferable.dataFlavor = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType + "; class=com.mxgraph.swing.util.mxGraphTransferable", null, mxGraphTransferable.class.getClassLoader()); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + + private void makeController() { + log.warn("KnowtatorView: Making controller"); + controller = new KnowtatorController(); + + setUpOWL(); + } + + private void setUpOWL() { + OWLWorkspace workspace = null; + try { + workspace = controller.getOWLAPIDataExtractor().getWorkSpace(); + } catch (OWLWorkSpaceNotSetException ignored) { + + } + if (workspace == null) { + if (getOWLWorkspace() != null) { + controller.getOWLAPIDataExtractor().setUpOWL(getOWLWorkspace()); + log.warn("Adding class label as renderer listener"); + getOWLWorkspace().getOWLModelManager().addListener(annotationClassLabel); + } + } + + } + + public KnowtatorController getController() { + return controller; + } + + @Override + public void initialiseClassView() { + } + + private void createUIComponents() { + DropTarget dt = new DropTarget(this, this); + dt.setActive(true); + + panel1 = this; + projectMenu = new ProjectMenu(this); + knowtatorTextPane = new MainKnowtatorTextPane(this); + graphViewDialog = new GraphViewDialog(this); + annotationIDLabel = new AnnotationIDLabel(this); + annotationClassLabel = new AnnotationClassLabel(this); + annotatorLabel = new AnnotatorLabel(this); + spanList = new SpanList(this); + textSourceChooser = new TextSourceChooser(this); + profileChooser = new ProfileChooser(this); + } + + private void makeButtons() { + + findTextButton.addActionListener(e -> { + try { + controller.getOWLAPIDataExtractor().searchForString(knowtatorTextPane.getSelectedText()); + } catch (OWLWorkSpaceNotSetException ignored) { + + } + }); + + assignColorToClassButton.addActionListener( + e -> { + OWLClass owlClass = controller.getSelectionManager().getSelectedOWLClass(); + if (owlClass == null) { + if (controller.getProjectManager().isProjectLoaded()) { + owlClass = controller.getSelectionManager().getSelectedAnnotation().getOwlClass(); + } + } + if (owlClass != null) { + Color c = JColorChooser.showDialog(this, "Pick a color for " + owlClass, Color.CYAN); + if (c != null) { + controller.getSelectionManager().getActiveProfile().addColor(owlClass, c); + + if (JOptionPane.showConfirmDialog( + this, "Assign color to descendants of " + owlClass + "?") + == JOptionPane.OK_OPTION) { + try { + Set descendants = + controller.getOWLAPIDataExtractor().getDescendants(owlClass); + + for (OWLClass descendant : descendants) { + controller.getSelectionManager().getActiveProfile().addColor(descendant, c); + } + } catch (OWLWorkSpaceNotSetException ignored) { + } + } + } + } + }); + + profileFilterCheckBox.addChangeListener(controller.getSelectionManager()); + + growSelectionStartButton.addActionListener( + (ActionEvent e) -> { + if (controller.getSelectionManager().getSelectedSpan() == null) { + knowtatorTextPane.growStart(); + } else { + controller + .getSelectionManager() + .getActiveTextSource() + .getAnnotationManager() + .growSelectedSpanStart(); + } + }); + shrinkSelectionStartButton.addActionListener( + (ActionEvent e) -> { + if (controller.getSelectionManager().getSelectedSpan() == null) { + knowtatorTextPane.shrinkStart(); + } else { + controller + .getSelectionManager() + .getActiveTextSource() + .getAnnotationManager() + .shrinkSelectedSpanStart(); + } + }); + shrinkSelectionEndButton.addActionListener( + (ActionEvent e) -> { + if (controller.getSelectionManager().getSelectedSpan() == null) { + knowtatorTextPane.shrinkEnd(); + } else { + controller + .getSelectionManager() + .getActiveTextSource() + .getAnnotationManager() + .shrinkSelectedSpanEnd(); + } + }); + growSelectionEndButton.addActionListener( + (ActionEvent e) -> { + if (controller.getSelectionManager().getSelectedSpan() == null) { + knowtatorTextPane.growEnd(); + } else { + controller + .getSelectionManager() + .getActiveTextSource() + .getAnnotationManager() + .growSelectedSpanEnd(); + } + }); + + previousSpanButton.addActionListener( + (ActionEvent e) -> controller.getSelectionManager().getPreviousSpan()); + nextSpanButton.addActionListener( + (ActionEvent e) -> controller.getSelectionManager().getNextSpan()); + + showGraphViewerButton.addActionListener(e -> graphViewDialog.setVisible(true)); + + removeAnnotationButton.addActionListener( + e -> { + if (controller.getProjectManager().isProjectLoaded() + && JOptionPane.showConfirmDialog( + this, + "Are you sure you want to remove the selected annotation?", + "Remove Annotation", + JOptionPane.YES_NO_OPTION) + == JOptionPane.YES_OPTION) { + controller + .getSelectionManager() + .getActiveTextSource() + .getAnnotationManager() + .removeSelectedAnnotation(); + } + }); + addAnnotationButton.addActionListener( + e -> { + if (controller.getProjectManager().isProjectLoaded()) { + controller + .getSelectionManager() + .getActiveTextSource() + .getAnnotationManager() + .addSelectedAnnotation(); + } + }); + + previousTextSourceButton.addActionListener( + e -> controller.getSelectionManager().getPreviousTextSource()); + nextTextSourceButton.addActionListener( + e -> controller.getSelectionManager().getNextTextSource()); + + decreaseFontSizeButton.addActionListener( + (ActionEvent e) -> knowtatorTextPane.decreaseFontSize()); + increaseFontSizeButton.addActionListener( + (ActionEvent e) -> knowtatorTextPane.increaseFindSize()); + textSourceChooser.addActionListener( + e -> { + JComboBox comboBox = (JComboBox) e.getSource(); + if (comboBox.getSelectedItem() != null) { + controller.getSelectionManager().setSelectedTextSource((TextSource) comboBox.getSelectedItem()); + } + }); + profileChooser.addActionListener( + e -> { + JComboBox comboBox = (JComboBox) e.getSource(); + if (comboBox.getSelectedItem() != null) { + controller.getSelectionManager().setSelectedProfile((Profile) comboBox.getSelectedItem()); + } + }); + spanList.addListSelectionListener( + e -> { + JList jList = (JList) e.getSource(); + if (jList.getSelectedValue() != null) { + controller.getSelectionManager().setSelectedSpan((Span) jList.getSelectedValue()); + } + }); + nextMatchButton.addActionListener( + e -> { + String textToFind = matchTextField.getText(); + KnowtatorTextPane currentKnowtatorTextPane = getKnowtatorTextPane(); + String textToSearch = currentKnowtatorTextPane.getText(); + if (!caseSensitiveCheckBox.isSelected()) { + textToSearch = textToSearch.toLowerCase(); + } + int matchLoc = + textToSearch.indexOf(textToFind, currentKnowtatorTextPane.getSelectionStart() + 1); + if (matchLoc != -1) { + currentKnowtatorTextPane.requestFocusInWindow(); + currentKnowtatorTextPane.select(matchLoc, matchLoc + textToFind.length()); + } else { + currentKnowtatorTextPane.setSelectionStart(textToSearch.length()); + } + }); + previousMatchButton.addActionListener( + e -> { + String textToFind = matchTextField.getText(); + String textToSearch = knowtatorTextPane.getText(); + if (!caseSensitiveCheckBox.isSelected()) { + textToSearch = textToSearch.toLowerCase(); + } + int matchLoc = + textToSearch.lastIndexOf(textToFind, knowtatorTextPane.getSelectionStart() - 1); + if (matchLoc != -1) { + knowtatorTextPane.requestFocusInWindow(); + knowtatorTextPane.select(matchLoc, matchLoc + textToFind.length()); + } else { + knowtatorTextPane.setSelectionStart(-1); + } + }); + + textToGraphButton.addActionListener( + e -> { + if (controller.getProjectManager().isProjectLoaded()) { + controller + .getSelectionManager() + .getActiveGraphSpace() + .setGraphText( + knowtatorTextPane.getSelectionStart(), knowtatorTextPane.getSelectionEnd()); + } + }); + } + + private void owlEntitySelectionChanged(OWLEntity owlEntity) { + if (getView() != null) { + if (getView().isSyncronizing()) { + getOWLWorkspace().getOWLSelectionModel().setSelectedEntity(owlEntity); + } + } + } + + @Override + protected OWLClass updateView(OWLClass selectedClass) { + setUpOWL(); + controller.getSelectionManager().setSelectedOWLClass(selectedClass); + return selectedClass; + } + + @Override + public void disposeView() { + if (controller.getProjectManager().isProjectLoaded() + && JOptionPane.showConfirmDialog( + this, + "Save changes to Knowtator project?", + "Save Project", + JOptionPane.YES_NO_OPTION) + == JOptionPane.YES_OPTION) { + controller.getProjectManager().saveProject(); + } + } + + @Override + public void dropActionChanged(DropTargetDragEvent e) { + } + + @Override + public void dragExit(DropTargetEvent e) { + } + + @Override + public void drop(DropTargetDropEvent e) { + } + + public KnowtatorTextPane getKnowtatorTextPane() { + return knowtatorTextPane; + } + + @Override + public void dragEnter(DropTargetDragEvent e) { + } + + @Override + public void dragOver(DropTargetDragEvent e) { + } + + public JMenu getProjectMenu() { + return projectMenu; + } + + public GraphViewDialog getGraphViewDialog() { + return graphViewDialog; + } + + + @Override + public void owlClassChanged(OWLClass owlClass) { + owlEntitySelectionChanged(owlClass); + } + + @Override + public void owlObjectPropertyChanged(OWLObjectProperty owlObjectProperty) { + owlEntitySelectionChanged(owlObjectProperty); + } + + /** + * Method generated by IntelliJ IDEA GUI Designer + * >>> IMPORTANT!! <<< + * DO NOT edit this method OR call it in your code! + * + * @noinspection ALL + */ + private void $$$setupUI$$$() { + createUIComponents(); + panel1.setLayout(new BorderLayout(0, 0)); + mainPane = new JSplitPane(); + mainPane.setDividerLocation(1536); + mainPane.setOneTouchExpandable(true); + panel1.add(mainPane, BorderLayout.CENTER); + infoPane = new JSplitPane(); + infoPane.setOrientation(0); + mainPane.setRightComponent(infoPane); + findPanel = new JPanel(); + findPanel.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(2, 3, new Insets(0, 0, 0, 0), -1, -1)); + infoPane.setLeftComponent(findPanel); + findPanel.setBorder(BorderFactory.createTitledBorder(ResourceBundle.getBundle("ui").getString("find"))); + nextMatchButton = new JButton(); + this.$$$loadButtonText$$$(nextMatchButton, ResourceBundle.getBundle("ui").getString("next")); + findPanel.add(nextMatchButton, new com.intellij.uiDesigner.core.GridConstraints(0, 2, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_HORIZONTAL, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + previousMatchButton = new JButton(); + this.$$$loadButtonText$$$(previousMatchButton, ResourceBundle.getBundle("ui").getString("previous")); + findPanel.add(previousMatchButton, new com.intellij.uiDesigner.core.GridConstraints(0, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_HORIZONTAL, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + matchTextField = new JTextField(); + findPanel.add(matchTextField, new com.intellij.uiDesigner.core.GridConstraints(0, 1, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_HORIZONTAL, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + caseSensitiveCheckBox = new JCheckBox(); + this.$$$loadButtonText$$$(caseSensitiveCheckBox, ResourceBundle.getBundle("ui").getString("case.sensitive")); + findPanel.add(caseSensitiveCheckBox, new com.intellij.uiDesigner.core.GridConstraints(1, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + regexCheckBox = new JCheckBox(); + this.$$$loadButtonText$$$(regexCheckBox, ResourceBundle.getBundle("ui").getString("regex")); + findPanel.add(regexCheckBox, new com.intellij.uiDesigner.core.GridConstraints(1, 1, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + infoPanel = new JPanel(); + infoPanel.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(5, 1, new Insets(0, 0, 0, 0), -1, -1)); + infoPane.setRightComponent(infoPanel); + infoPanelTitleLabel = new JLabel(); + Font infoPanelTitleLabelFont = this.$$$getFont$$$(null, Font.BOLD, 18, infoPanelTitleLabel.getFont()); + if (infoPanelTitleLabelFont != null) infoPanelTitleLabel.setFont(infoPanelTitleLabelFont); + infoPanelTitleLabel.setHorizontalAlignment(0); + infoPanelTitleLabel.setHorizontalTextPosition(0); + this.$$$loadLabelText$$$(infoPanelTitleLabel, ResourceBundle.getBundle("ui").getString("annotation.information")); + infoPanelTitleLabel.setVerticalAlignment(0); + infoPanelTitleLabel.setVerticalTextPosition(0); + infoPanel.add(infoPanelTitleLabel, new com.intellij.uiDesigner.core.GridConstraints(0, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_WEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + final JScrollPane scrollPane1 = new JScrollPane(); + infoPanel.add(scrollPane1, new com.intellij.uiDesigner.core.GridConstraints(4, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_BOTH, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false)); + scrollPane1.setViewportView(spanList); + annotationIDLabel.setHorizontalAlignment(2); + annotationIDLabel.setHorizontalTextPosition(2); + annotationIDLabel.setVerticalAlignment(1); + annotationIDLabel.setVerticalTextPosition(1); + infoPanel.add(annotationIDLabel, new com.intellij.uiDesigner.core.GridConstraints(1, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_NORTHWEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + annotationClassLabel.setHorizontalAlignment(2); + annotationClassLabel.setHorizontalTextPosition(2); + annotationClassLabel.setVerticalAlignment(1); + annotationClassLabel.setVerticalTextPosition(1); + infoPanel.add(annotationClassLabel, new com.intellij.uiDesigner.core.GridConstraints(2, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_NORTHWEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + annotatorLabel.setHorizontalAlignment(2); + annotatorLabel.setHorizontalTextPosition(2); + annotatorLabel.setVerticalAlignment(1); + annotatorLabel.setVerticalTextPosition(1); + infoPanel.add(annotatorLabel, new com.intellij.uiDesigner.core.GridConstraints(3, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_NORTHWEST, com.intellij.uiDesigner.core.GridConstraints.FILL_NONE, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false)); + textPanel = new JPanel(); + textPanel.setLayout(new com.intellij.uiDesigner.core.GridLayoutManager(3, 1, new Insets(0, 0, 0, 0), -1, -1)); + mainPane.setLeftComponent(textPanel); + textPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(new Color(-16777216)), null)); + textSourceToolBar = new JToolBar(); + textSourceToolBar.setFloatable(false); + textPanel.add(textSourceToolBar, new com.intellij.uiDesigner.core.GridConstraints(0, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_HORIZONTAL, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(-1, 20), null, 0, false)); + decreaseFontSizeButton = new JButton(); + decreaseFontSizeButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-Decrease Font (Custom).png"))); + decreaseFontSizeButton.setText(""); + decreaseFontSizeButton.setToolTipText(ResourceBundle.getBundle("ui").getString("decrease.font.size")); + textSourceToolBar.add(decreaseFontSizeButton); + increaseFontSizeButton = new JButton(); + increaseFontSizeButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-Increase Font (Custom).png"))); + increaseFontSizeButton.setText(""); + increaseFontSizeButton.setToolTipText(ResourceBundle.getBundle("ui").getString("increase.font.size")); + textSourceToolBar.add(increaseFontSizeButton); + previousTextSourceButton = new JButton(); + previousTextSourceButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-up-filled-50 (Custom).png"))); + previousTextSourceButton.setText(""); + previousTextSourceButton.setToolTipText(ResourceBundle.getBundle("ui").getString("previous.text.source")); + textSourceToolBar.add(previousTextSourceButton); + nextTextSourceButton = new JButton(); + nextTextSourceButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-down-filled-50 (Custom).png"))); + nextTextSourceButton.setText(""); + nextTextSourceButton.setToolTipText(ResourceBundle.getBundle("ui").getString("next.text.source")); + textSourceToolBar.add(nextTextSourceButton); + final JLabel label1 = new JLabel(); + this.$$$loadLabelText$$$(label1, ResourceBundle.getBundle("ui").getString("document")); + textSourceToolBar.add(label1); + textSourceToolBar.add(textSourceChooser); + final JLabel label2 = new JLabel(); + this.$$$loadLabelText$$$(label2, ResourceBundle.getBundle("ui").getString("profile")); + textSourceToolBar.add(label2); + textSourceToolBar.add(profileChooser); + annotationToolBar = new JToolBar(); + annotationToolBar.setFloatable(false); + textPanel.add(annotationToolBar, new com.intellij.uiDesigner.core.GridConstraints(1, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_HORIZONTAL, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(-1, 20), null, 0, false)); + showGraphViewerButton = new JButton(); + showGraphViewerButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-edit-node-50 (Custom).png"))); + showGraphViewerButton.setText(""); + showGraphViewerButton.setToolTipText(ResourceBundle.getBundle("ui").getString("show.graph.viewer")); + annotationToolBar.add(showGraphViewerButton); + textToGraphButton = new JButton(); + this.$$$loadButtonText$$$(textToGraphButton, ResourceBundle.getBundle("ui").getString("text.to.graph")); + textToGraphButton.setToolTipText(ResourceBundle.getBundle("ui").getString("send.selected.text.to.graph")); + annotationToolBar.add(textToGraphButton); + findTextButton = new JButton(); + this.$$$loadButtonText$$$(findTextButton, ResourceBundle.getBundle("log4j").getString("find.in.ontology")); + annotationToolBar.add(findTextButton); + addAnnotationButton = new JButton(); + addAnnotationButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-plus-50 (Custom).png"))); + addAnnotationButton.setText(""); + addAnnotationButton.setToolTipText(ResourceBundle.getBundle("ui").getString("add.annotation")); + annotationToolBar.add(addAnnotationButton); + removeAnnotationButton = new JButton(); + removeAnnotationButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-minus-50 (Custom).png"))); + removeAnnotationButton.setText(""); + removeAnnotationButton.setToolTipText(ResourceBundle.getBundle("ui").getString("remove.annotation")); + annotationToolBar.add(removeAnnotationButton); + previousSpanButton = new JButton(); + previousSpanButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-left-filled-50 (Custom).png"))); + previousSpanButton.setText(""); + previousSpanButton.setToolTipText(ResourceBundle.getBundle("ui").getString("previous.span")); + annotationToolBar.add(previousSpanButton); + growSelectionStartButton = new JButton(); + growSelectionStartButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-back-50 (Custom).png"))); + growSelectionStartButton.setText(""); + growSelectionStartButton.setToolTipText(ResourceBundle.getBundle("ui").getString("grow.selection.start")); + annotationToolBar.add(growSelectionStartButton); + shrinkSelectionStartButton = new JButton(); + shrinkSelectionStartButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-forward-50 (Custom).png"))); + shrinkSelectionStartButton.setText(""); + shrinkSelectionStartButton.setToolTipText(ResourceBundle.getBundle("ui").getString("shrink.selection.start")); + annotationToolBar.add(shrinkSelectionStartButton); + shrinkSelectionEndButton = new JButton(); + shrinkSelectionEndButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-back-50 (Custom).png"))); + shrinkSelectionEndButton.setText(""); + shrinkSelectionEndButton.setToolTipText(ResourceBundle.getBundle("ui").getString("shrink.selection.end")); + annotationToolBar.add(shrinkSelectionEndButton); + growSelectionEndButton = new JButton(); + growSelectionEndButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-forward-50 (Custom).png"))); + growSelectionEndButton.setText(""); + growSelectionEndButton.setToolTipText(ResourceBundle.getBundle("ui").getString("grow.selection.end")); + annotationToolBar.add(growSelectionEndButton); + nextSpanButton = new JButton(); + nextSpanButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-right-filled-50 (Custom).png"))); + nextSpanButton.setText(""); + nextSpanButton.setToolTipText(ResourceBundle.getBundle("ui").getString("next.span")); + annotationToolBar.add(nextSpanButton); + assignColorToClassButton = new JButton(); + assignColorToClassButton.setIcon(new ImageIcon(getClass().getResource("/icon/icons8-color-dropper-filled-50 (Custom).png"))); + assignColorToClassButton.setText(""); + assignColorToClassButton.setToolTipText(ResourceBundle.getBundle("ui").getString("assign.color.to.class")); + annotationToolBar.add(assignColorToClassButton); + profileFilterCheckBox = new JCheckBox(); + this.$$$loadButtonText$$$(profileFilterCheckBox, ResourceBundle.getBundle("ui").getString("profile.filter")); + profileFilterCheckBox.setToolTipText(ResourceBundle.getBundle("ui").getString("filter.annotations.by.profile")); + annotationToolBar.add(profileFilterCheckBox); + final JScrollPane scrollPane2 = new JScrollPane(); + textPanel.add(scrollPane2, new com.intellij.uiDesigner.core.GridConstraints(2, 0, 1, 1, com.intellij.uiDesigner.core.GridConstraints.ANCHOR_CENTER, com.intellij.uiDesigner.core.GridConstraints.FILL_BOTH, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_CAN_SHRINK | com.intellij.uiDesigner.core.GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false)); + knowtatorTextPane.setBackground(new Color(-1)); + knowtatorTextPane.setEditable(false); + knowtatorTextPane.setFocusTraversalPolicyProvider(true); + knowtatorTextPane.setFocusable(false); + knowtatorTextPane.setForeground(new Color(-16777216)); + knowtatorTextPane.setText(""); + scrollPane2.setViewportView(knowtatorTextPane); + final JMenuBar menuBar1 = new JMenuBar(); + menuBar1.setLayout(new BorderLayout(0, 0)); + panel1.add(menuBar1, BorderLayout.NORTH); + projectMenu.setSelected(false); + this.$$$loadButtonText$$$(projectMenu, ResourceBundle.getBundle("ui").getString("knowator.project")); + menuBar1.add(projectMenu, BorderLayout.WEST); + } + + /** + * @noinspection ALL + */ + private Font $$$getFont$$$(String fontName, int style, int size, Font currentFont) { + if (currentFont == null) return null; + String resultName; + if (fontName == null) { + resultName = currentFont.getName(); + } else { + Font testFont = new Font(fontName, Font.PLAIN, 10); + if (testFont.canDisplay('a') && testFont.canDisplay('1')) { + resultName = fontName; + } else { + resultName = currentFont.getName(); + } + } + return new Font(resultName, style >= 0 ? style : currentFont.getStyle(), size >= 0 ? size : currentFont.getSize()); + } + + /** + * @noinspection ALL + */ + private void $$$loadLabelText$$$(JLabel component, String text) { + StringBuffer result = new StringBuffer(); + boolean haveMnemonic = false; + char mnemonic = '\0'; + int mnemonicIndex = -1; + for (int i = 0; i < text.length(); i++) { + if (text.charAt(i) == '&') { + i++; + if (i == text.length()) break; + if (!haveMnemonic && text.charAt(i) != '&') { + haveMnemonic = true; + mnemonic = text.charAt(i); + mnemonicIndex = result.length(); + } + } + result.append(text.charAt(i)); + } + component.setText(result.toString()); + if (haveMnemonic) { + component.setDisplayedMnemonic(mnemonic); + component.setDisplayedMnemonicIndex(mnemonicIndex); + } + } + + /** + * @noinspection ALL + */ + private void $$$loadButtonText$$$(AbstractButton component, String text) { + StringBuffer result = new StringBuffer(); + boolean haveMnemonic = false; + char mnemonic = '\0'; + int mnemonicIndex = -1; + for (int i = 0; i < text.length(); i++) { + if (text.charAt(i) == '&') { + i++; + if (i == text.length()) break; + if (!haveMnemonic && text.charAt(i) != '&') { + haveMnemonic = true; + mnemonic = text.charAt(i); + mnemonicIndex = result.length(); + } + } + result.append(text.charAt(i)); + } + component.setText(result.toString()); + if (haveMnemonic) { + component.setMnemonic(mnemonic); + component.setDisplayedMnemonicIndex(mnemonicIndex); + } + } + + /** + * @noinspection ALL + */ + public JComponent $$$getRootComponent$$$() { + return panel1; + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/SpanList.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/SpanList.java index 8e399551..db13abef 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/SpanList.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/SpanList.java @@ -1,25 +1,25 @@ -package edu.ucdenver.ccp.knowtator.view; - -import edu.ucdenver.ccp.knowtator.events.AnnotationChangeEvent; -import edu.ucdenver.ccp.knowtator.listeners.AnnotationSelectionListener; -import edu.ucdenver.ccp.knowtator.model.Span; - -import javax.swing.*; -import java.util.Set; - -public class SpanList extends JList implements AnnotationSelectionListener { - - SpanList(KnowtatorView view) { - view.getController().getSelectionManager().addAnnotationListener(this); - - } - - @Override - public void selectedAnnotationChanged(AnnotationChangeEvent e) { - if (e.getNew() != null) { - Set spans = e.getNew().getSpanCollection().getCollection(); - setListData(spans.toArray(new Span[0])); - } - } - -} +package edu.ucdenver.ccp.knowtator.view; + +import edu.ucdenver.ccp.knowtator.events.AnnotationChangeEvent; +import edu.ucdenver.ccp.knowtator.listeners.AnnotationSelectionListener; +import edu.ucdenver.ccp.knowtator.model.Span; + +import javax.swing.*; +import java.util.Set; + +public class SpanList extends JList implements AnnotationSelectionListener { + + SpanList(KnowtatorView view) { + view.getController().getSelectionManager().addAnnotationListener(this); + + } + + @Override + public void selectedAnnotationChanged(AnnotationChangeEvent e) { + if (e.getNew() != null) { + Set spans = e.getNew().getSpanCollection().getCollection(); + setListData(spans.toArray(new Span[0])); + } + } + +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/chooser/Chooser.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/chooser/Chooser.java index 051c8c01..a6b51dbe 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/chooser/Chooser.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/chooser/Chooser.java @@ -1,41 +1,41 @@ -package edu.ucdenver.ccp.knowtator.view.chooser; - -import edu.ucdenver.ccp.knowtator.listeners.CollectionListener; -import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; -import edu.ucdenver.ccp.knowtator.model.KnowtatorObject; -import edu.ucdenver.ccp.knowtator.view.KnowtatorView; - -import javax.swing.*; - -public class Chooser extends JComboBox implements ProjectListener, CollectionListener { - - Chooser(KnowtatorView view) { - view.getController().getProjectManager().addListener(this); - } - - Chooser(KnowtatorView view, K[] initialData) { - super(initialData); - view.getController().getProjectManager().addListener(this); - } - - - @Override - public void added(K addedObject) { - addItem(addedObject); - } - - @Override - public void removed(K removedObject) { - removeItem(removedObject); - } - - @Override - public void projectClosed() { - removeAllItems(); - } - - @Override - public void projectLoaded() { - - } -} +package edu.ucdenver.ccp.knowtator.view.chooser; + +import edu.ucdenver.ccp.knowtator.listeners.CollectionListener; +import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; +import edu.ucdenver.ccp.knowtator.model.KnowtatorObject; +import edu.ucdenver.ccp.knowtator.view.KnowtatorView; + +import javax.swing.*; + +public class Chooser extends JComboBox implements ProjectListener, CollectionListener { + + Chooser(KnowtatorView view) { + view.getController().getProjectManager().addListener(this); + } + + Chooser(KnowtatorView view, K[] initialData) { + super(initialData); + view.getController().getProjectManager().addListener(this); + } + + + @Override + public void added(K addedObject) { + addItem(addedObject); + } + + @Override + public void removed(K removedObject) { + removeItem(removedObject); + } + + @Override + public void projectClosed() { + removeAllItems(); + } + + @Override + public void projectLoaded() { + + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/chooser/GraphSpaceChooser.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/chooser/GraphSpaceChooser.java index 3ef56d9e..0988f7d8 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/chooser/GraphSpaceChooser.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/chooser/GraphSpaceChooser.java @@ -1,43 +1,43 @@ -package edu.ucdenver.ccp.knowtator.view.chooser; - -import edu.ucdenver.ccp.knowtator.events.GraphSpaceChangeEvent; -import edu.ucdenver.ccp.knowtator.events.TextSourceChangeEvent; -import edu.ucdenver.ccp.knowtator.listeners.GraphSpaceCollectionListener; -import edu.ucdenver.ccp.knowtator.listeners.GraphSpaceSelectionListener; -import edu.ucdenver.ccp.knowtator.listeners.TextSourceSelectionListener; -import edu.ucdenver.ccp.knowtator.model.GraphSpace; -import edu.ucdenver.ccp.knowtator.view.KnowtatorView; - -import javax.swing.*; - -public class GraphSpaceChooser extends Chooser - implements GraphSpaceCollectionListener, - GraphSpaceSelectionListener, - TextSourceSelectionListener { - - public GraphSpaceChooser(KnowtatorView view) { - super(view); - view.getController().getSelectionManager().addGraphSpaceListener(this); - view.getController().getSelectionManager().addTextSourceListener(this); - } - - @Override - public void activeGraphSpaceChanged(GraphSpaceChangeEvent e) { - setSelectedItem(e.getNew()); - } - - @Override - public void activeTextSourceChanged(TextSourceChangeEvent e) { - setModel( - new DefaultComboBoxModel<>( - e.getNew() - .getAnnotationManager() - .getGraphSpaceCollection() - .getCollection() - .toArray(new GraphSpace[0]))); - if (e.getOld() != null) { - e.getOld().getAnnotationManager().getGraphSpaceCollection().removeListener(this); - } - e.getNew().getAnnotationManager().getGraphSpaceCollection().addListener(this); - } -} +package edu.ucdenver.ccp.knowtator.view.chooser; + +import edu.ucdenver.ccp.knowtator.events.GraphSpaceChangeEvent; +import edu.ucdenver.ccp.knowtator.events.TextSourceChangeEvent; +import edu.ucdenver.ccp.knowtator.listeners.GraphSpaceCollectionListener; +import edu.ucdenver.ccp.knowtator.listeners.GraphSpaceSelectionListener; +import edu.ucdenver.ccp.knowtator.listeners.TextSourceSelectionListener; +import edu.ucdenver.ccp.knowtator.model.GraphSpace; +import edu.ucdenver.ccp.knowtator.view.KnowtatorView; + +import javax.swing.*; + +public class GraphSpaceChooser extends Chooser + implements GraphSpaceCollectionListener, + GraphSpaceSelectionListener, + TextSourceSelectionListener { + + public GraphSpaceChooser(KnowtatorView view) { + super(view); + view.getController().getSelectionManager().addGraphSpaceListener(this); + view.getController().getSelectionManager().addTextSourceListener(this); + } + + @Override + public void activeGraphSpaceChanged(GraphSpaceChangeEvent e) { + setSelectedItem(e.getNew()); + } + + @Override + public void activeTextSourceChanged(TextSourceChangeEvent e) { + setModel( + new DefaultComboBoxModel<>( + e.getNew() + .getAnnotationManager() + .getGraphSpaceCollection() + .getCollection() + .toArray(new GraphSpace[0]))); + if (e.getOld() != null) { + e.getOld().getAnnotationManager().getGraphSpaceCollection().removeListener(this); + } + e.getNew().getAnnotationManager().getGraphSpaceCollection().addListener(this); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/chooser/ProfileChooser.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/chooser/ProfileChooser.java index 1ac503ab..dd6d7eb8 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/chooser/ProfileChooser.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/chooser/ProfileChooser.java @@ -1,36 +1,36 @@ -package edu.ucdenver.ccp.knowtator.view.chooser; - -import edu.ucdenver.ccp.knowtator.events.ProfileChangeEvent; -import edu.ucdenver.ccp.knowtator.listeners.ProfileCollectionListener; -import edu.ucdenver.ccp.knowtator.listeners.ProfileSelectionListener; -import edu.ucdenver.ccp.knowtator.model.Profile; -import edu.ucdenver.ccp.knowtator.model.collection.ProfileCollection; -import edu.ucdenver.ccp.knowtator.view.KnowtatorView; - -import javax.swing.*; - -public class ProfileChooser extends Chooser implements ProfileCollectionListener, ProfileSelectionListener { - - private ProfileCollection collection; - - public ProfileChooser(KnowtatorView view) { - super( - view, - view.getController().getProfileManager().getProfileCollection().getCollection().toArray(new Profile[0])); - this.collection = view.getController().getProfileManager().getProfileCollection(); - view.getController().getSelectionManager().addProfileListener(this); - view.getController().getProfileManager().getProfileCollection().addListener(this); - } - - @Override - public void activeProfileChange(ProfileChangeEvent e) { - setSelectedItem(e.getNew()); - } - - @Override - public void projectLoaded() { - collection.addListener(this); - setModel(new DefaultComboBoxModel<>(collection.getCollection().toArray(new Profile[0]))); - collection.addListener(this); - } -} +package edu.ucdenver.ccp.knowtator.view.chooser; + +import edu.ucdenver.ccp.knowtator.events.ProfileChangeEvent; +import edu.ucdenver.ccp.knowtator.listeners.ProfileCollectionListener; +import edu.ucdenver.ccp.knowtator.listeners.ProfileSelectionListener; +import edu.ucdenver.ccp.knowtator.model.Profile; +import edu.ucdenver.ccp.knowtator.model.collection.ProfileCollection; +import edu.ucdenver.ccp.knowtator.view.KnowtatorView; + +import javax.swing.*; + +public class ProfileChooser extends Chooser implements ProfileCollectionListener, ProfileSelectionListener { + + private ProfileCollection collection; + + public ProfileChooser(KnowtatorView view) { + super( + view, + view.getController().getProfileManager().getProfileCollection().getCollection().toArray(new Profile[0])); + this.collection = view.getController().getProfileManager().getProfileCollection(); + view.getController().getSelectionManager().addProfileListener(this); + view.getController().getProfileManager().getProfileCollection().addListener(this); + } + + @Override + public void activeProfileChange(ProfileChangeEvent e) { + setSelectedItem(e.getNew()); + } + + @Override + public void projectLoaded() { + collection.addListener(this); + setModel(new DefaultComboBoxModel<>(collection.getCollection().toArray(new Profile[0]))); + collection.addListener(this); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/chooser/TextSourceChooser.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/chooser/TextSourceChooser.java index f5afbe2f..0a15f7e2 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/chooser/TextSourceChooser.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/chooser/TextSourceChooser.java @@ -1,42 +1,42 @@ -package edu.ucdenver.ccp.knowtator.view.chooser; - -import edu.ucdenver.ccp.knowtator.events.TextSourceChangeEvent; -import edu.ucdenver.ccp.knowtator.listeners.TextSourceCollectionListener; -import edu.ucdenver.ccp.knowtator.listeners.TextSourceSelectionListener; -import edu.ucdenver.ccp.knowtator.model.TextSource; -import edu.ucdenver.ccp.knowtator.model.collection.TextSourceCollection; -import edu.ucdenver.ccp.knowtator.view.KnowtatorView; - -import javax.swing.*; - -public class TextSourceChooser extends Chooser implements TextSourceCollectionListener, TextSourceSelectionListener { - - private TextSourceCollection collection; - - public TextSourceChooser(KnowtatorView view) { - super( - view, - view.getController() - .getTextSourceManager() - .getTextSourceCollection() - .getCollection() - .toArray(new TextSource[0])); - view.getController().getSelectionManager().addTextSourceListener(this); - collection = view.getController().getTextSourceManager().getTextSourceCollection(); - collection.addListener(this); - } - - - @Override - public void activeTextSourceChanged(TextSourceChangeEvent e) { - setSelectedItem(e.getNew()); - } - - @Override - public void projectLoaded() { - collection.addListener(this); - setModel(new DefaultComboBoxModel<>(collection.getCollection().toArray(new TextSource[0]))); - collection.addListener(this); - } - -} +package edu.ucdenver.ccp.knowtator.view.chooser; + +import edu.ucdenver.ccp.knowtator.events.TextSourceChangeEvent; +import edu.ucdenver.ccp.knowtator.listeners.TextSourceCollectionListener; +import edu.ucdenver.ccp.knowtator.listeners.TextSourceSelectionListener; +import edu.ucdenver.ccp.knowtator.model.TextSource; +import edu.ucdenver.ccp.knowtator.model.collection.TextSourceCollection; +import edu.ucdenver.ccp.knowtator.view.KnowtatorView; + +import javax.swing.*; + +public class TextSourceChooser extends Chooser implements TextSourceCollectionListener, TextSourceSelectionListener { + + private TextSourceCollection collection; + + public TextSourceChooser(KnowtatorView view) { + super( + view, + view.getController() + .getTextSourceManager() + .getTextSourceCollection() + .getCollection() + .toArray(new TextSource[0])); + view.getController().getSelectionManager().addTextSourceListener(this); + collection = view.getController().getTextSourceManager().getTextSourceCollection(); + collection.addListener(this); + } + + + @Override + public void activeTextSourceChanged(TextSourceChangeEvent e) { + setSelectedItem(e.getNew()); + } + + @Override + public void projectLoaded() { + collection.addListener(this); + setModel(new DefaultComboBoxModel<>(collection.getCollection().toArray(new TextSource[0]))); + collection.addListener(this); + } + +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/menu/AnnotationPopupMenu.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/menu/AnnotationPopupMenu.java index f5d41705..539ce27b 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/menu/AnnotationPopupMenu.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/menu/AnnotationPopupMenu.java @@ -1,170 +1,170 @@ -package edu.ucdenver.ccp.knowtator.view.menu; - -import com.mxgraph.model.mxCell; -import edu.ucdenver.ccp.knowtator.model.Annotation; -import edu.ucdenver.ccp.knowtator.model.GraphSpace; -import edu.ucdenver.ccp.knowtator.model.Span; -import edu.ucdenver.ccp.knowtator.model.TextSource; -import edu.ucdenver.ccp.knowtator.view.KnowtatorView; -import org.apache.log4j.Logger; - -import javax.swing.*; -import java.awt.event.MouseEvent; -import java.util.Set; - -public class AnnotationPopupMenu extends JPopupMenu { - @SuppressWarnings("unused") - private static final Logger log = Logger.getLogger(AnnotationPopupMenu.class); - - private MouseEvent e; - private KnowtatorView view; - - public AnnotationPopupMenu( - MouseEvent e, KnowtatorView view) { - this.e = e; - this.view = view; - } - - private JMenuItem addAnnotationCommand() { - JMenuItem menuItem = new JMenuItem("Add annotation"); - menuItem.addActionListener( - e12 -> - view.getController() - .getSelectionManager() - .getActiveTextSource() - .getAnnotationManager() - .addSelectedAnnotation()); - - return menuItem; - } - - private JMenuItem addSpanToAnnotationCommand() { - JMenuItem addSpanToAnnotation = new JMenuItem("Add span"); - addSpanToAnnotation.addActionListener(e4 -> view.getController().getSelectionManager().getActiveTextSource().getAnnotationManager().addSpanToSelectedAnnotation()); - - return addSpanToAnnotation; - } - - private JMenuItem removeSpanFromAnnotationCommand() { - JMenuItem removeSpanFromSelectedAnnotation = - new JMenuItem( - String.format( - "Delete span from %s", - view.getController().getSelectionManager().getSelectedAnnotation().getOwlClass())); - removeSpanFromSelectedAnnotation.addActionListener( - e5 -> - view.getController() - .getSelectionManager() - .getActiveTextSource() - .getAnnotationManager() - .removeSpanFromAnnotation( - view.getController().getSelectionManager().getSelectedAnnotation(), - view.getController().getSelectionManager().getSelectedSpan())); - - return removeSpanFromSelectedAnnotation; - } - - private JMenuItem selectAnnotationCommand(Annotation annotation, Span span) { - JMenuItem selectAnnotationMenuItem = new JMenuItem("Select " + annotation.getOwlClass()); - selectAnnotationMenuItem.addActionListener( - e3 -> view.getController().getSelectionManager().setSelectedSpan(span)); - - return selectAnnotationMenuItem; - } - - private JMenuItem removeAnnotationCommand() { - JMenuItem removeAnnotationMenuItem = - new JMenuItem( - "Delete " + view.getController().getSelectionManager().getSelectedAnnotation().getOwlClass()); - removeAnnotationMenuItem.addActionListener( - e4 -> { - if (JOptionPane.showConfirmDialog( - view, - "Are you sure you want to remove the selected annotation?", - "Remove Annotation", - JOptionPane.YES_NO_OPTION) - == JOptionPane.YES_OPTION) { - view.getController() - .getSelectionManager() - .getActiveTextSource() - .getAnnotationManager() - .addSelectedAnnotation(); - } - }); - - return removeAnnotationMenuItem; - } - - public void chooseAnnotation(Set spansContainingLocation) { - // Menu items to select and remove annotations - spansContainingLocation.forEach( - span -> add(selectAnnotationCommand(span.getAnnotation(), span))); - - show(e.getComponent(), e.getX(), e.getY()); - } - - private JMenu goToAnnotationInGraphCommand() { - JMenu jMenu = new JMenu("Graphs"); - - Annotation annotation = view.getController().getSelectionManager().getSelectedAnnotation(); - TextSource textSource = view.getController().getSelectionManager().getActiveTextSource(); - for (GraphSpace graphSpace : - textSource.getAnnotationManager().getGraphSpaceCollection().getCollection()) { - mxCell vertex = graphSpace.containsVertexCorrespondingToAnnotation(annotation); - if (vertex != null) { - JMenuItem menuItem = new JMenuItem(graphSpace.getId()); - menuItem.addActionListener( - e1 -> { - view.getGraphViewDialog().setVisible(true); - view.getController().getSelectionManager().setSelectedGraphSpace(graphSpace); - view.getController().getSelectionManager().setSelectedAnnotation(null, null); - view.getController().getSelectionManager().setSelectedAnnotation(annotation, null); - }); - jMenu.add(menuItem); - } - } - - return jMenu; - } - - public void showPopUpMenu(int release_offset) { - - Annotation selectedAnnotation = view.getController().getSelectionManager().getSelectedAnnotation(); - Span selectedSpan = view.getController().getSelectionManager().getSelectedSpan(); - - if (view.getKnowtatorTextPane().getSelectionStart() <= release_offset - && release_offset <= view.getKnowtatorTextPane().getSelectionEnd() - && view.getKnowtatorTextPane().getSelectionStart() != view.getKnowtatorTextPane().getSelectionEnd()) { - view.getKnowtatorTextPane().select( - view.getKnowtatorTextPane().getSelectionStart(), view.getKnowtatorTextPane().getSelectionEnd()); - add(addAnnotationCommand()); - if (view.getController().getSelectionManager().getSelectedAnnotation() != null) { - add(addSpanToAnnotationCommand()); - } - } else if (selectedAnnotation != null - && selectedSpan.getStart() <= release_offset - && release_offset <= selectedSpan.getEnd()) { - add(removeAnnotationCommand()); - if (view.getController().getSelectionManager().getSelectedSpan() != null - && view.getController().getSelectionManager().getSelectedAnnotation() != null - && view.getController() - .getSelectionManager() - .getSelectedAnnotation() - .getSpanCollection() - .getCollection() - .size() - > 1) { - add(removeSpanFromAnnotationCommand()); - } - - if (view.getController().getSelectionManager().getSelectedAnnotation() != null) { - addSeparator(); - add(goToAnnotationInGraphCommand()); - } - } else { - return; - } - - show(e.getComponent(), e.getX(), e.getY()); - } -} +package edu.ucdenver.ccp.knowtator.view.menu; + +import com.mxgraph.model.mxCell; +import edu.ucdenver.ccp.knowtator.model.Annotation; +import edu.ucdenver.ccp.knowtator.model.GraphSpace; +import edu.ucdenver.ccp.knowtator.model.Span; +import edu.ucdenver.ccp.knowtator.model.TextSource; +import edu.ucdenver.ccp.knowtator.view.KnowtatorView; +import org.apache.log4j.Logger; + +import javax.swing.*; +import java.awt.event.MouseEvent; +import java.util.Set; + +public class AnnotationPopupMenu extends JPopupMenu { + @SuppressWarnings("unused") + private static final Logger log = Logger.getLogger(AnnotationPopupMenu.class); + + private MouseEvent e; + private KnowtatorView view; + + public AnnotationPopupMenu( + MouseEvent e, KnowtatorView view) { + this.e = e; + this.view = view; + } + + private JMenuItem addAnnotationCommand() { + JMenuItem menuItem = new JMenuItem("Add annotation"); + menuItem.addActionListener( + e12 -> + view.getController() + .getSelectionManager() + .getActiveTextSource() + .getAnnotationManager() + .addSelectedAnnotation()); + + return menuItem; + } + + private JMenuItem addSpanToAnnotationCommand() { + JMenuItem addSpanToAnnotation = new JMenuItem("Add span"); + addSpanToAnnotation.addActionListener(e4 -> view.getController().getSelectionManager().getActiveTextSource().getAnnotationManager().addSpanToSelectedAnnotation()); + + return addSpanToAnnotation; + } + + private JMenuItem removeSpanFromAnnotationCommand() { + JMenuItem removeSpanFromSelectedAnnotation = + new JMenuItem( + String.format( + "Delete span from %s", + view.getController().getSelectionManager().getSelectedAnnotation().getOwlClass())); + removeSpanFromSelectedAnnotation.addActionListener( + e5 -> + view.getController() + .getSelectionManager() + .getActiveTextSource() + .getAnnotationManager() + .removeSpanFromAnnotation( + view.getController().getSelectionManager().getSelectedAnnotation(), + view.getController().getSelectionManager().getSelectedSpan())); + + return removeSpanFromSelectedAnnotation; + } + + private JMenuItem selectAnnotationCommand(Annotation annotation, Span span) { + JMenuItem selectAnnotationMenuItem = new JMenuItem("Select " + annotation.getOwlClass()); + selectAnnotationMenuItem.addActionListener( + e3 -> view.getController().getSelectionManager().setSelectedSpan(span)); + + return selectAnnotationMenuItem; + } + + private JMenuItem removeAnnotationCommand() { + JMenuItem removeAnnotationMenuItem = + new JMenuItem( + "Delete " + view.getController().getSelectionManager().getSelectedAnnotation().getOwlClass()); + removeAnnotationMenuItem.addActionListener( + e4 -> { + if (JOptionPane.showConfirmDialog( + view, + "Are you sure you want to remove the selected annotation?", + "Remove Annotation", + JOptionPane.YES_NO_OPTION) + == JOptionPane.YES_OPTION) { + view.getController() + .getSelectionManager() + .getActiveTextSource() + .getAnnotationManager() + .addSelectedAnnotation(); + } + }); + + return removeAnnotationMenuItem; + } + + public void chooseAnnotation(Set spansContainingLocation) { + // Menu items to select and remove annotations + spansContainingLocation.forEach( + span -> add(selectAnnotationCommand(span.getAnnotation(), span))); + + show(e.getComponent(), e.getX(), e.getY()); + } + + private JMenu goToAnnotationInGraphCommand() { + JMenu jMenu = new JMenu("Graphs"); + + Annotation annotation = view.getController().getSelectionManager().getSelectedAnnotation(); + TextSource textSource = view.getController().getSelectionManager().getActiveTextSource(); + for (GraphSpace graphSpace : + textSource.getAnnotationManager().getGraphSpaceCollection().getCollection()) { + mxCell vertex = graphSpace.containsVertexCorrespondingToAnnotation(annotation); + if (vertex != null) { + JMenuItem menuItem = new JMenuItem(graphSpace.getId()); + menuItem.addActionListener( + e1 -> { + view.getGraphViewDialog().setVisible(true); + view.getController().getSelectionManager().setSelectedGraphSpace(graphSpace); + view.getController().getSelectionManager().setSelectedAnnotation(null, null); + view.getController().getSelectionManager().setSelectedAnnotation(annotation, null); + }); + jMenu.add(menuItem); + } + } + + return jMenu; + } + + public void showPopUpMenu(int release_offset) { + + Annotation selectedAnnotation = view.getController().getSelectionManager().getSelectedAnnotation(); + Span selectedSpan = view.getController().getSelectionManager().getSelectedSpan(); + + if (view.getKnowtatorTextPane().getSelectionStart() <= release_offset + && release_offset <= view.getKnowtatorTextPane().getSelectionEnd() + && view.getKnowtatorTextPane().getSelectionStart() != view.getKnowtatorTextPane().getSelectionEnd()) { + view.getKnowtatorTextPane().select( + view.getKnowtatorTextPane().getSelectionStart(), view.getKnowtatorTextPane().getSelectionEnd()); + add(addAnnotationCommand()); + if (view.getController().getSelectionManager().getSelectedAnnotation() != null) { + add(addSpanToAnnotationCommand()); + } + } else if (selectedAnnotation != null + && selectedSpan.getStart() <= release_offset + && release_offset <= selectedSpan.getEnd()) { + add(removeAnnotationCommand()); + if (view.getController().getSelectionManager().getSelectedSpan() != null + && view.getController().getSelectionManager().getSelectedAnnotation() != null + && view.getController() + .getSelectionManager() + .getSelectedAnnotation() + .getSpanCollection() + .getCollection() + .size() + > 1) { + add(removeSpanFromAnnotationCommand()); + } + + if (view.getController().getSelectionManager().getSelectedAnnotation() != null) { + addSeparator(); + add(goToAnnotationInGraphCommand()); + } + } else { + return; + } + + show(e.getComponent(), e.getX(), e.getY()); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/menu/GraphMenu.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/menu/GraphMenu.java index 19a7877c..de850c4f 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/menu/GraphMenu.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/menu/GraphMenu.java @@ -1,231 +1,231 @@ -package edu.ucdenver.ccp.knowtator.view.menu; - -import com.mxgraph.util.mxCellRenderer; -import edu.ucdenver.ccp.knowtator.view.KnowtatorView; - -import javax.imageio.ImageIO; -import javax.swing.*; -import javax.swing.event.AncestorEvent; -import javax.swing.event.AncestorListener; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.filechooser.FileFilter; -import javax.swing.filechooser.FileNameExtensionFilter; -import javax.swing.text.BadLocationException; -import javax.swing.text.DefaultHighlighter; -import java.awt.*; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; - -public class GraphMenu extends JMenu { - - - private KnowtatorView view; - - public GraphMenu( KnowtatorView view) { - super("Graph"); - this.view = view; - - add(addNewGraphCommand()); - add(renameGraphCommand()); - add(saveToImageCommand()); - add(deleteGraphCommand()); - } - - private JMenuItem renameGraphCommand() { - JMenuItem menuItem = new JMenuItem("Rename Graph"); - menuItem.addActionListener( - e -> { - String graphName = getGraphNameInput(null); - if (graphName != null) { - view.getController().getSelectionManager().getActiveGraphSpace().setId(graphName); - } - }); - - return menuItem; - } - - private JMenuItem saveToImageCommand() { - JMenuItem menuItem = new JMenuItem("Save as PNG"); - menuItem.addActionListener( - e -> { - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setCurrentDirectory(view.getController().getProjectManager().getProjectLocation()); - FileFilter fileFilter = new FileNameExtensionFilter("PNG", "png"); - fileChooser.setFileFilter(fileFilter); - if (fileChooser.showSaveDialog(view) == JFileChooser.APPROVE_OPTION) { - BufferedImage image = - mxCellRenderer.createBufferedImage( - view.getController().getSelectionManager().getActiveGraphSpace(), - null, - 1, - Color.WHITE, - true, - null); - try { - ImageIO.write( - image, "PNG", new File(fileChooser.getSelectedFile().getAbsolutePath())); - } catch (IOException e1) { - e1.printStackTrace(); - } - } - }); - - return menuItem; - } - - private JMenuItem deleteGraphCommand() { - JMenuItem deleteGraphMenuItem = new JMenuItem("Delete graph"); - deleteGraphMenuItem.addActionListener( - e -> { - if (JOptionPane.showConfirmDialog( - view, "Are you sure you want to delete this graph?") - == JOptionPane.YES_OPTION) { - view.getController() - .getSelectionManager() - .getActiveTextSource() - .getAnnotationManager() - .removeGraphSpace(view.getController().getSelectionManager().getActiveGraphSpace()); - } - }); - - return deleteGraphMenuItem; - } - - private JMenuItem addNewGraphCommand() { - JMenuItem addNewGraphMenuItem = new JMenuItem("Create new graph"); - addNewGraphMenuItem.addActionListener( - e -> { - if (view.getController().getSelectionManager().getActiveTextSource() != null) { - - String graphName = getGraphNameInput(null); - - if (graphName != null) { - view.getController() - .getSelectionManager() - .getActiveTextSource() - .getAnnotationManager() - .addGraphSpace(graphName); - } - } - }); - - return addNewGraphMenuItem; - } - - private String getGraphNameInput(JTextField field1) { - if (field1 == null) { - field1 = new JTextField(); - - JTextField finalField = field1; - field1 - .getDocument() - .addDocumentListener( - new DocumentListener() { - @Override - public void insertUpdate(DocumentEvent e) { - warn(); - } - - @Override - public void removeUpdate(DocumentEvent e) { - warn(); - } - - @Override - public void changedUpdate(DocumentEvent e) { - warn(); - } - - private void warn() { - if (view.getController() - .getSelectionManager() - .getActiveTextSource() - .getAnnotationManager() - .getGraphSpaceCollection() - .containsID(finalField.getText())) { - try { - finalField - .getHighlighter() - .addHighlight( - 0, - finalField.getText().length(), - new DefaultHighlighter.DefaultHighlightPainter(Color.RED)); - } catch (BadLocationException e1) { - e1.printStackTrace(); - } - } else { - finalField.getHighlighter().removeAllHighlights(); - } - } - }); - } - Object[] message = { - "Graph Title", field1, - }; - field1.addAncestorListener(new RequestFocusListener()); - int option = - JOptionPane.showConfirmDialog( - view, - message, - "Enter a name for this graph", - JOptionPane.OK_CANCEL_OPTION); - if (option == JOptionPane.OK_OPTION) { - if (view.getController() - .getSelectionManager() - .getActiveTextSource() - .getAnnotationManager() - .getGraphSpaceCollection() - .containsID(field1.getText())) { - JOptionPane.showMessageDialog(field1, "Graph name already in use"); - return getGraphNameInput(field1); - } else { - return field1.getText(); - } - } - return null; - } - - /** - * Taken from https://tips4java.wordpress.com/2010/03/14/dialog-focus/ - */ - private class RequestFocusListener implements AncestorListener { - private boolean removeListener; - - /* - * Convenience constructor. The listener is only used once and then it is - * removed from the component. - */ - RequestFocusListener() { - this(true); - } - - /* - * Constructor that controls whether this listen can be used once or - * multiple times. - * - * @param removeListener when true this listener is only invoked once - * otherwise it can be invoked multiple times. - */ - RequestFocusListener(boolean removeListener) { - this.removeListener = removeListener; - } - - @Override - public void ancestorAdded(AncestorEvent e) { - JComponent component = e.getComponent(); - component.requestFocusInWindow(); - - if (removeListener) component.removeAncestorListener(this); - } - - @Override - public void ancestorMoved(AncestorEvent e) { - } - - @Override - public void ancestorRemoved(AncestorEvent e) { - } - } -} +package edu.ucdenver.ccp.knowtator.view.menu; + +import com.mxgraph.util.mxCellRenderer; +import edu.ucdenver.ccp.knowtator.view.KnowtatorView; + +import javax.imageio.ImageIO; +import javax.swing.*; +import javax.swing.event.AncestorEvent; +import javax.swing.event.AncestorListener; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultHighlighter; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +public class GraphMenu extends JMenu { + + + private KnowtatorView view; + + public GraphMenu( KnowtatorView view) { + super("Graph"); + this.view = view; + + add(addNewGraphCommand()); + add(renameGraphCommand()); + add(saveToImageCommand()); + add(deleteGraphCommand()); + } + + private JMenuItem renameGraphCommand() { + JMenuItem menuItem = new JMenuItem("Rename Graph"); + menuItem.addActionListener( + e -> { + String graphName = getGraphNameInput(null); + if (graphName != null) { + view.getController().getSelectionManager().getActiveGraphSpace().setId(graphName); + } + }); + + return menuItem; + } + + private JMenuItem saveToImageCommand() { + JMenuItem menuItem = new JMenuItem("Save as PNG"); + menuItem.addActionListener( + e -> { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setCurrentDirectory(view.getController().getProjectManager().getProjectLocation()); + FileFilter fileFilter = new FileNameExtensionFilter("PNG", "png"); + fileChooser.setFileFilter(fileFilter); + if (fileChooser.showSaveDialog(view) == JFileChooser.APPROVE_OPTION) { + BufferedImage image = + mxCellRenderer.createBufferedImage( + view.getController().getSelectionManager().getActiveGraphSpace(), + null, + 1, + Color.WHITE, + true, + null); + try { + ImageIO.write( + image, "PNG", new File(fileChooser.getSelectedFile().getAbsolutePath())); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + }); + + return menuItem; + } + + private JMenuItem deleteGraphCommand() { + JMenuItem deleteGraphMenuItem = new JMenuItem("Delete graph"); + deleteGraphMenuItem.addActionListener( + e -> { + if (JOptionPane.showConfirmDialog( + view, "Are you sure you want to delete this graph?") + == JOptionPane.YES_OPTION) { + view.getController() + .getSelectionManager() + .getActiveTextSource() + .getAnnotationManager() + .removeGraphSpace(view.getController().getSelectionManager().getActiveGraphSpace()); + } + }); + + return deleteGraphMenuItem; + } + + private JMenuItem addNewGraphCommand() { + JMenuItem addNewGraphMenuItem = new JMenuItem("Create new graph"); + addNewGraphMenuItem.addActionListener( + e -> { + if (view.getController().getSelectionManager().getActiveTextSource() != null) { + + String graphName = getGraphNameInput(null); + + if (graphName != null) { + view.getController() + .getSelectionManager() + .getActiveTextSource() + .getAnnotationManager() + .addGraphSpace(graphName); + } + } + }); + + return addNewGraphMenuItem; + } + + private String getGraphNameInput(JTextField field1) { + if (field1 == null) { + field1 = new JTextField(); + + JTextField finalField = field1; + field1 + .getDocument() + .addDocumentListener( + new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + warn(); + } + + @Override + public void removeUpdate(DocumentEvent e) { + warn(); + } + + @Override + public void changedUpdate(DocumentEvent e) { + warn(); + } + + private void warn() { + if (view.getController() + .getSelectionManager() + .getActiveTextSource() + .getAnnotationManager() + .getGraphSpaceCollection() + .containsID(finalField.getText())) { + try { + finalField + .getHighlighter() + .addHighlight( + 0, + finalField.getText().length(), + new DefaultHighlighter.DefaultHighlightPainter(Color.RED)); + } catch (BadLocationException e1) { + e1.printStackTrace(); + } + } else { + finalField.getHighlighter().removeAllHighlights(); + } + } + }); + } + Object[] message = { + "Graph Title", field1, + }; + field1.addAncestorListener(new RequestFocusListener()); + int option = + JOptionPane.showConfirmDialog( + view, + message, + "Enter a name for this graph", + JOptionPane.OK_CANCEL_OPTION); + if (option == JOptionPane.OK_OPTION) { + if (view.getController() + .getSelectionManager() + .getActiveTextSource() + .getAnnotationManager() + .getGraphSpaceCollection() + .containsID(field1.getText())) { + JOptionPane.showMessageDialog(field1, "Graph name already in use"); + return getGraphNameInput(field1); + } else { + return field1.getText(); + } + } + return null; + } + + /** + * Taken from https://tips4java.wordpress.com/2010/03/14/dialog-focus/ + */ + private class RequestFocusListener implements AncestorListener { + private boolean removeListener; + + /* + * Convenience constructor. The listener is only used once and then it is + * removed from the component. + */ + RequestFocusListener() { + this(true); + } + + /* + * Constructor that controls whether this listen can be used once or + * multiple times. + * + * @param removeListener when true this listener is only invoked once + * otherwise it can be invoked multiple times. + */ + RequestFocusListener(boolean removeListener) { + this.removeListener = removeListener; + } + + @Override + public void ancestorAdded(AncestorEvent e) { + JComponent component = e.getComponent(); + component.requestFocusInWindow(); + + if (removeListener) component.removeAncestorListener(this); + } + + @Override + public void ancestorMoved(AncestorEvent e) { + } + + @Override + public void ancestorRemoved(AncestorEvent e) { + } + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/menu/ProjectMenu.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/menu/ProjectMenu.java index 62a29625..4d08e5cb 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/menu/ProjectMenu.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/menu/ProjectMenu.java @@ -1,328 +1,328 @@ -package edu.ucdenver.ccp.knowtator.view.menu; - -import edu.ucdenver.ccp.knowtator.iaa.IAAException; -import edu.ucdenver.ccp.knowtator.iaa.KnowtatorIAA; -import edu.ucdenver.ccp.knowtator.io.brat.BratStandoffUtil; -import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLUtil; -import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; -import edu.ucdenver.ccp.knowtator.view.KnowtatorView; -import org.apache.log4j.LogManager; -import org.apache.log4j.Logger; - -import javax.swing.*; -import javax.swing.filechooser.FileFilter; -import javax.swing.filechooser.FileNameExtensionFilter; -import java.io.File; - -public class ProjectMenu extends JMenu implements ProjectListener { - @SuppressWarnings("unused") - private static Logger log = LogManager.getLogger(ProjectMenu.class); - - private JCheckBoxMenuItem classIAAChoice; - private JCheckBoxMenuItem spanIAAChoice; - private JCheckBoxMenuItem classAndSpanIAAChoice; - private KnowtatorView view; - - public ProjectMenu( KnowtatorView view) { - super("Project"); - this.view = view; - - add(newProjectCommand()); - add(openRecentCommand()); - add(openProjectCommand()); - add(saveProjectCommand()); - addSeparator(); - add(addDocumentCommand()); - add(importAnnotationsCommand()); - addSeparator(); - add(exportToBratCommand()); - addSeparator(); - add(profileMenu()); - add(removeProfileMenu()); - addSeparator(); - add(IAAMenu()); - addSeparator(); - add(debugMenuItem()); - } - - private JMenuItem debugMenuItem() { - JMenuItem menuItem = new JCheckBoxMenuItem("Debug"); - menuItem.addActionListener(e -> view.getController().setDebug()); - return menuItem; - } - - private JMenu profileMenu() { - JMenu profileMenu = new JMenu("Profile"); - profileMenu.add(newProfile()); - return profileMenu; - } - - private JMenu IAAMenu() { - JMenu iaaMenu = new JMenu("IAA"); - - classIAAChoice = new JCheckBoxMenuItem("Class"); - spanIAAChoice = new JCheckBoxMenuItem("Span"); - classAndSpanIAAChoice = new JCheckBoxMenuItem("Class and Span"); - - iaaMenu.add(classIAAChoice); - iaaMenu.add(spanIAAChoice); - iaaMenu.add(classAndSpanIAAChoice); - iaaMenu.add(getRunIAACommand()); - - return iaaMenu; - } - - private JMenuItem exportToBratCommand() { - JMenuItem menuItem = new JMenuItem("Export to Brat"); - menuItem.addActionListener( - e -> { - JFileChooser fileChooser = - new JFileChooser(view.getController().getProjectManager().getAnnotationsLocation()); - fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - - if (fileChooser.showOpenDialog(view) == JFileChooser.APPROVE_OPTION) { - view.getController() - .getProjectManager() - .saveToFormat(BratStandoffUtil.class, fileChooser.getSelectedFile()); - } - }); - - return menuItem; - } - - private JMenu openRecentCommand() { - JMenu menu = new JMenu("Open recent ..."); - - String recentProjectName = view.getController().getPrefs().get("Last Project", null); - - if (recentProjectName != null) { - File recentProject = new File(recentProjectName); - JMenuItem recentProjectMenuItem = new JMenuItem(recentProject.getName()); - recentProjectMenuItem.addActionListener(e -> loadProject(recentProject)); - - menu.add(recentProjectMenuItem); - } - - return menu; - } - - private void loadProject(File file) { - if (view.getController().getProjectManager().isProjectLoaded() - && JOptionPane.showConfirmDialog( - view, - "Save changes to Knowtator project?", - "Save Project", - JOptionPane.YES_NO_OPTION) - == JOptionPane.YES_OPTION) { - view.getController().getProjectManager().saveProject(); - } - - view.getController().getProjectManager().loadProject(file); - } - - private JMenuItem importAnnotationsCommand() { - JMenuItem menuItem = new JMenuItem("Import Annotations"); - menuItem.addActionListener( - e -> { - if (view.getController().getProjectManager().getProjectLocation() == null) { - JOptionPane.showMessageDialog( - view, - "Not in a project. Please create or load " - + "a project first. (Project -> New Project or Project -> Load Project)"); - } else { - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setCurrentDirectory( - view.getController().getProjectManager().getAnnotationsLocation()); - FileFilter fileFilter = new FileNameExtensionFilter("XML", "knowtator"); - fileChooser.setFileFilter(fileFilter); - fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - - if (fileChooser.showOpenDialog(view) == JFileChooser.APPROVE_OPTION) { - view.getController() - .getProjectManager() - .loadFromFormat(KnowtatorXMLUtil.class, fileChooser.getSelectedFile()); - } - } - }); - return menuItem; - } - - private JMenuItem addDocumentCommand() { - JMenuItem menuItem = new JMenuItem("Add Document"); - menuItem.addActionListener( - e -> { - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setCurrentDirectory(view.getController().getProjectManager().getArticlesLocation()); - - if (fileChooser.showOpenDialog(view) == JFileChooser.APPROVE_OPTION) { - view.getController().getProjectManager().addDocument(fileChooser.getSelectedFile()); - } - }); - return menuItem; - } - - private JMenuItem newProjectCommand() { - JMenuItem menuItem = new JMenuItem("New Project"); - menuItem.addActionListener( - e -> { - String projectName = JOptionPane.showInputDialog("Enter project name"); - - if (projectName != null && !projectName.equals("")) { - - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setDialogTitle("Select project root"); - fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - - if (fileChooser.showOpenDialog(view) == JFileChooser.APPROVE_OPTION) { - File projectDirectory = new File(fileChooser.getSelectedFile(), projectName); - view.getController().getProjectManager().newProject(projectDirectory); - } - } - }); - - return menuItem; - } - - private JMenuItem openProjectCommand() { - - JMenuItem open = new JMenuItem("Open Project"); - open.addActionListener( - e -> { - JFileChooser fileChooser = new JFileChooser(); - FileFilter fileFilter = new FileNameExtensionFilter("Knowtator", "knowtator"); - fileChooser.setFileFilter(fileFilter); - fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - - if (fileChooser.showOpenDialog(view) == JFileChooser.APPROVE_OPTION) { - loadProject(fileChooser.getSelectedFile()); - } - }); - - return open; - } - - private JMenuItem saveProjectCommand() { - JMenuItem save = new JMenuItem("Save Project"); - save.addActionListener( - e -> { - try { - view.getController().getProjectManager().saveProject(); - } catch (Exception e1) { - JOptionPane.showMessageDialog( - view, - String.format( - "Something went wrong trying to save your project:/n %s", e1.getMessage())); - e1.printStackTrace(); - } - }); - - return save; - } - - @Override - public void projectClosed() { - } - - @Override - public void projectLoaded() { - removeAll(); - add(newProjectCommand()); - add(openRecentCommand()); - add(openProjectCommand()); - add(saveProjectCommand()); - addSeparator(); - add(addDocumentCommand()); - add(importAnnotationsCommand()); - addSeparator(); - add(IAAMenu()); - addSeparator(); - add(profileMenu()); - } - - private JMenuItem newProfile() { - JMenuItem newAnnotator = new JMenuItem("New profile"); - newAnnotator.addActionListener( - e -> { - int dialogResult = - JOptionPane.showConfirmDialog( - view, - "Load profile from test_project(knowtator)?", - "New profile", - JOptionPane.YES_NO_CANCEL_OPTION); - if (dialogResult == JOptionPane.YES_OPTION) { - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setCurrentDirectory(view.getController().getProjectManager().getProjectLocation()); - - if (fileChooser.showSaveDialog(view) == JFileChooser.APPROVE_OPTION) { - view.getController() - .getProjectManager() - .loadFromFormat( - KnowtatorXMLUtil.class, - view.getController().getProfileManager(), - fileChooser.getSelectedFile()); - } - } else if (dialogResult == JOptionPane.NO_OPTION) { - JTextField field1 = new JTextField(); - Object[] message = { - "Profile name", field1, - }; - int option = - JOptionPane.showConfirmDialog( - view, - message, - "Enter profile name", - JOptionPane.OK_CANCEL_OPTION); - if (option == JOptionPane.OK_OPTION) { - String annotator = field1.getText(); - view.getController().getProfileManager().addProfile(annotator); - } - } - }); - - return newAnnotator; - } - - private JMenuItem removeProfileMenu() { - JMenuItem removeProfileMenu = new JMenuItem("Remove profile"); - removeProfileMenu.addActionListener(e -> view.getController().getProfileManager().removeActiveProfile()); - - return removeProfileMenu; - } - - private JMenuItem getRunIAACommand() { - JMenuItem runIAA = new JMenuItem("Run IAA"); - - runIAA.addActionListener( - e -> { - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setCurrentDirectory(view.getController().getProjectManager().getProjectLocation()); - fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - // - // disable the "All files" option. - // - fileChooser.setAcceptAllFileFilterUsed(false); - if (fileChooser.showSaveDialog(view) == JFileChooser.APPROVE_OPTION) { - File outputDirectory = fileChooser.getSelectedFile(); - - try { - KnowtatorIAA knowtatorIAA = new KnowtatorIAA(outputDirectory, view.getController()); - - if (classIAAChoice.getState()) { - knowtatorIAA.runClassIAA(); - } - if (spanIAAChoice.getState()) { - knowtatorIAA.runSpanIAA(); - } - if (classAndSpanIAAChoice.getState()) { - knowtatorIAA.runClassAndSpanIAA(); - } - - knowtatorIAA.closeHTML(); - } catch (IAAException e1) { - e1.printStackTrace(); - } - } - }); - return runIAA; - } -} +package edu.ucdenver.ccp.knowtator.view.menu; + +import edu.ucdenver.ccp.knowtator.iaa.IAAException; +import edu.ucdenver.ccp.knowtator.iaa.KnowtatorIAA; +import edu.ucdenver.ccp.knowtator.io.brat.BratStandoffUtil; +import edu.ucdenver.ccp.knowtator.io.knowtator.KnowtatorXMLUtil; +import edu.ucdenver.ccp.knowtator.listeners.ProjectListener; +import edu.ucdenver.ccp.knowtator.view.KnowtatorView; +import org.apache.log4j.LogManager; +import org.apache.log4j.Logger; + +import javax.swing.*; +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; +import java.io.File; + +public class ProjectMenu extends JMenu implements ProjectListener { + @SuppressWarnings("unused") + private static Logger log = LogManager.getLogger(ProjectMenu.class); + + private JCheckBoxMenuItem classIAAChoice; + private JCheckBoxMenuItem spanIAAChoice; + private JCheckBoxMenuItem classAndSpanIAAChoice; + private KnowtatorView view; + + public ProjectMenu( KnowtatorView view) { + super("Project"); + this.view = view; + + add(newProjectCommand()); + add(openRecentCommand()); + add(openProjectCommand()); + add(saveProjectCommand()); + addSeparator(); + add(addDocumentCommand()); + add(importAnnotationsCommand()); + addSeparator(); + add(exportToBratCommand()); + addSeparator(); + add(profileMenu()); + add(removeProfileMenu()); + addSeparator(); + add(IAAMenu()); + addSeparator(); + add(debugMenuItem()); + } + + private JMenuItem debugMenuItem() { + JMenuItem menuItem = new JCheckBoxMenuItem("Debug"); + menuItem.addActionListener(e -> view.getController().setDebug()); + return menuItem; + } + + private JMenu profileMenu() { + JMenu profileMenu = new JMenu("Profile"); + profileMenu.add(newProfile()); + return profileMenu; + } + + private JMenu IAAMenu() { + JMenu iaaMenu = new JMenu("IAA"); + + classIAAChoice = new JCheckBoxMenuItem("Class"); + spanIAAChoice = new JCheckBoxMenuItem("Span"); + classAndSpanIAAChoice = new JCheckBoxMenuItem("Class and Span"); + + iaaMenu.add(classIAAChoice); + iaaMenu.add(spanIAAChoice); + iaaMenu.add(classAndSpanIAAChoice); + iaaMenu.add(getRunIAACommand()); + + return iaaMenu; + } + + private JMenuItem exportToBratCommand() { + JMenuItem menuItem = new JMenuItem("Export to Brat"); + menuItem.addActionListener( + e -> { + JFileChooser fileChooser = + new JFileChooser(view.getController().getProjectManager().getAnnotationsLocation()); + fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + + if (fileChooser.showOpenDialog(view) == JFileChooser.APPROVE_OPTION) { + view.getController() + .getProjectManager() + .saveToFormat(BratStandoffUtil.class, fileChooser.getSelectedFile()); + } + }); + + return menuItem; + } + + private JMenu openRecentCommand() { + JMenu menu = new JMenu("Open recent ..."); + + String recentProjectName = view.getController().getPrefs().get("Last Project", null); + + if (recentProjectName != null) { + File recentProject = new File(recentProjectName); + JMenuItem recentProjectMenuItem = new JMenuItem(recentProject.getName()); + recentProjectMenuItem.addActionListener(e -> loadProject(recentProject)); + + menu.add(recentProjectMenuItem); + } + + return menu; + } + + private void loadProject(File file) { + if (view.getController().getProjectManager().isProjectLoaded() + && JOptionPane.showConfirmDialog( + view, + "Save changes to Knowtator project?", + "Save Project", + JOptionPane.YES_NO_OPTION) + == JOptionPane.YES_OPTION) { + view.getController().getProjectManager().saveProject(); + } + + view.getController().getProjectManager().loadProject(file); + } + + private JMenuItem importAnnotationsCommand() { + JMenuItem menuItem = new JMenuItem("Import Annotations"); + menuItem.addActionListener( + e -> { + if (view.getController().getProjectManager().getProjectLocation() == null) { + JOptionPane.showMessageDialog( + view, + "Not in a project. Please create or load " + + "a project first. (Project -> New Project or Project -> Load Project)"); + } else { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setCurrentDirectory( + view.getController().getProjectManager().getAnnotationsLocation()); + FileFilter fileFilter = new FileNameExtensionFilter("XML", "knowtator"); + fileChooser.setFileFilter(fileFilter); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + + if (fileChooser.showOpenDialog(view) == JFileChooser.APPROVE_OPTION) { + view.getController() + .getProjectManager() + .loadFromFormat(KnowtatorXMLUtil.class, fileChooser.getSelectedFile()); + } + } + }); + return menuItem; + } + + private JMenuItem addDocumentCommand() { + JMenuItem menuItem = new JMenuItem("Add Document"); + menuItem.addActionListener( + e -> { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setCurrentDirectory(view.getController().getProjectManager().getArticlesLocation()); + + if (fileChooser.showOpenDialog(view) == JFileChooser.APPROVE_OPTION) { + view.getController().getProjectManager().addDocument(fileChooser.getSelectedFile()); + } + }); + return menuItem; + } + + private JMenuItem newProjectCommand() { + JMenuItem menuItem = new JMenuItem("New Project"); + menuItem.addActionListener( + e -> { + String projectName = JOptionPane.showInputDialog("Enter project name"); + + if (projectName != null && !projectName.equals("")) { + + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setDialogTitle("Select project root"); + fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + + if (fileChooser.showOpenDialog(view) == JFileChooser.APPROVE_OPTION) { + File projectDirectory = new File(fileChooser.getSelectedFile(), projectName); + view.getController().getProjectManager().newProject(projectDirectory); + } + } + }); + + return menuItem; + } + + private JMenuItem openProjectCommand() { + + JMenuItem open = new JMenuItem("Open Project"); + open.addActionListener( + e -> { + JFileChooser fileChooser = new JFileChooser(); + FileFilter fileFilter = new FileNameExtensionFilter("Knowtator", "knowtator"); + fileChooser.setFileFilter(fileFilter); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + + if (fileChooser.showOpenDialog(view) == JFileChooser.APPROVE_OPTION) { + loadProject(fileChooser.getSelectedFile()); + } + }); + + return open; + } + + private JMenuItem saveProjectCommand() { + JMenuItem save = new JMenuItem("Save Project"); + save.addActionListener( + e -> { + try { + view.getController().getProjectManager().saveProject(); + } catch (Exception e1) { + JOptionPane.showMessageDialog( + view, + String.format( + "Something went wrong trying to save your project:/n %s", e1.getMessage())); + e1.printStackTrace(); + } + }); + + return save; + } + + @Override + public void projectClosed() { + } + + @Override + public void projectLoaded() { + removeAll(); + add(newProjectCommand()); + add(openRecentCommand()); + add(openProjectCommand()); + add(saveProjectCommand()); + addSeparator(); + add(addDocumentCommand()); + add(importAnnotationsCommand()); + addSeparator(); + add(IAAMenu()); + addSeparator(); + add(profileMenu()); + } + + private JMenuItem newProfile() { + JMenuItem newAnnotator = new JMenuItem("New profile"); + newAnnotator.addActionListener( + e -> { + int dialogResult = + JOptionPane.showConfirmDialog( + view, + "Load profile from test_project(knowtator)?", + "New profile", + JOptionPane.YES_NO_CANCEL_OPTION); + if (dialogResult == JOptionPane.YES_OPTION) { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setCurrentDirectory(view.getController().getProjectManager().getProjectLocation()); + + if (fileChooser.showSaveDialog(view) == JFileChooser.APPROVE_OPTION) { + view.getController() + .getProjectManager() + .loadFromFormat( + KnowtatorXMLUtil.class, + view.getController().getProfileManager(), + fileChooser.getSelectedFile()); + } + } else if (dialogResult == JOptionPane.NO_OPTION) { + JTextField field1 = new JTextField(); + Object[] message = { + "Profile name", field1, + }; + int option = + JOptionPane.showConfirmDialog( + view, + message, + "Enter profile name", + JOptionPane.OK_CANCEL_OPTION); + if (option == JOptionPane.OK_OPTION) { + String annotator = field1.getText(); + view.getController().getProfileManager().addProfile(annotator); + } + } + }); + + return newAnnotator; + } + + private JMenuItem removeProfileMenu() { + JMenuItem removeProfileMenu = new JMenuItem("Remove profile"); + removeProfileMenu.addActionListener(e -> view.getController().getProfileManager().removeActiveProfile()); + + return removeProfileMenu; + } + + private JMenuItem getRunIAACommand() { + JMenuItem runIAA = new JMenuItem("Run IAA"); + + runIAA.addActionListener( + e -> { + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setCurrentDirectory(view.getController().getProjectManager().getProjectLocation()); + fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + // + // disable the "All files" option. + // + fileChooser.setAcceptAllFileFilterUsed(false); + if (fileChooser.showSaveDialog(view) == JFileChooser.APPROVE_OPTION) { + File outputDirectory = fileChooser.getSelectedFile(); + + try { + KnowtatorIAA knowtatorIAA = new KnowtatorIAA(outputDirectory, view.getController()); + + if (classIAAChoice.getState()) { + knowtatorIAA.runClassIAA(); + } + if (spanIAAChoice.getState()) { + knowtatorIAA.runSpanIAA(); + } + if (classAndSpanIAAChoice.getState()) { + knowtatorIAA.runClassAndSpanIAA(); + } + + knowtatorIAA.closeHTML(); + } catch (IAAException e1) { + e1.printStackTrace(); + } + } + }); + return runIAA; + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/textpane/GraphViewKnowtatorTextPane.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/textpane/GraphViewKnowtatorTextPane.java index 52c3b25d..3ec604d8 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/textpane/GraphViewKnowtatorTextPane.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/textpane/GraphViewKnowtatorTextPane.java @@ -1,75 +1,75 @@ -package edu.ucdenver.ccp.knowtator.view.textpane; - -import edu.ucdenver.ccp.knowtator.events.GraphSpaceChangeEvent; -import edu.ucdenver.ccp.knowtator.listeners.GraphSpaceListener; -import edu.ucdenver.ccp.knowtator.listeners.GraphSpaceSelectionListener; -import edu.ucdenver.ccp.knowtator.model.Span; -import edu.ucdenver.ccp.knowtator.model.TextSource; -import edu.ucdenver.ccp.knowtator.view.KnowtatorView; - -import javax.swing.text.BadLocationException; -import javax.swing.text.DefaultHighlighter; -import java.util.Set; - -public class GraphViewKnowtatorTextPane extends KnowtatorTextPane implements GraphSpaceListener, GraphSpaceSelectionListener { - - private int start; - private int end; - - public GraphViewKnowtatorTextPane(KnowtatorView view) { - super(view); - view.getController().getSelectionManager().addGraphSpaceListener(this); - } - - @Override - public void showTextPane(TextSource textSource) { - setText(textSource.getContent().substring(start, end)); - refreshHighlights(); - } - - @Override - public void highlightSpan( - int start, int end, DefaultHighlighter.DefaultHighlightPainter highlighter) - throws BadLocationException { - if (start >= this.start && end <= this.end) { - getHighlighter().addHighlight(start - this.start, end - this.start, highlighter); - } - } - - @Override - protected Set getSpans(Integer loc) { - return view.getController() - .getSelectionManager() - .getActiveTextSource() - .getAnnotationManager() - .getSpans(loc == null ? null : loc + start, start, end); - } - - @Override - public int getSelectionStart() { - return super.getSelectionStart() + start; - } - - @Override - public int getSelectionEnd() { - return super.getSelectionEnd() + start; - } - - @Override - public void graphTextChanged(TextSource textSource, int start, int end) { - this.start = start; - this.end = end; - showTextPane(textSource); - } - - @Override - public void activeGraphSpaceChanged(GraphSpaceChangeEvent e) { - if (e.getOld() != null) { - e.getOld().removeGraphSpaceListener(this); - } - e.getNew().addGraphSpaceListener(this); - this.start = e.getNew().getGraphTextStart(); - this.end = e.getNew().getGraphTextEnd(); - showTextPane(view.getController().getSelectionManager().getActiveTextSource()); - } -} +package edu.ucdenver.ccp.knowtator.view.textpane; + +import edu.ucdenver.ccp.knowtator.events.GraphSpaceChangeEvent; +import edu.ucdenver.ccp.knowtator.listeners.GraphSpaceListener; +import edu.ucdenver.ccp.knowtator.listeners.GraphSpaceSelectionListener; +import edu.ucdenver.ccp.knowtator.model.Span; +import edu.ucdenver.ccp.knowtator.model.TextSource; +import edu.ucdenver.ccp.knowtator.view.KnowtatorView; + +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultHighlighter; +import java.util.Set; + +public class GraphViewKnowtatorTextPane extends KnowtatorTextPane implements GraphSpaceListener, GraphSpaceSelectionListener { + + private int start; + private int end; + + public GraphViewKnowtatorTextPane(KnowtatorView view) { + super(view); + view.getController().getSelectionManager().addGraphSpaceListener(this); + } + + @Override + public void showTextPane(TextSource textSource) { + setText(textSource.getContent().substring(start, end)); + refreshHighlights(); + } + + @Override + public void highlightSpan( + int start, int end, DefaultHighlighter.DefaultHighlightPainter highlighter) + throws BadLocationException { + if (start >= this.start && end <= this.end) { + getHighlighter().addHighlight(start - this.start, end - this.start, highlighter); + } + } + + @Override + protected Set getSpans(Integer loc) { + return view.getController() + .getSelectionManager() + .getActiveTextSource() + .getAnnotationManager() + .getSpans(loc == null ? null : loc + start, start, end); + } + + @Override + public int getSelectionStart() { + return super.getSelectionStart() + start; + } + + @Override + public int getSelectionEnd() { + return super.getSelectionEnd() + start; + } + + @Override + public void graphTextChanged(TextSource textSource, int start, int end) { + this.start = start; + this.end = end; + showTextPane(textSource); + } + + @Override + public void activeGraphSpaceChanged(GraphSpaceChangeEvent e) { + if (e.getOld() != null) { + e.getOld().removeGraphSpaceListener(this); + } + e.getNew().addGraphSpaceListener(this); + this.start = e.getNew().getGraphTextStart(); + this.end = e.getNew().getGraphTextEnd(); + showTextPane(view.getController().getSelectionManager().getActiveTextSource()); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/textpane/KnowtatorTextPane.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/textpane/KnowtatorTextPane.java index 33355930..0788161d 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/textpane/KnowtatorTextPane.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/textpane/KnowtatorTextPane.java @@ -1,283 +1,283 @@ -package edu.ucdenver.ccp.knowtator.view.textpane; - -import edu.ucdenver.ccp.knowtator.events.AnnotationChangeEvent; -import edu.ucdenver.ccp.knowtator.events.ProfileChangeEvent; -import edu.ucdenver.ccp.knowtator.events.SpanChangeEvent; -import edu.ucdenver.ccp.knowtator.events.TextSourceChangeEvent; -import edu.ucdenver.ccp.knowtator.listeners.*; -import edu.ucdenver.ccp.knowtator.model.Profile; -import edu.ucdenver.ccp.knowtator.model.Span; -import edu.ucdenver.ccp.knowtator.model.TextSource; -import edu.ucdenver.ccp.knowtator.view.KnowtatorView; -import edu.ucdenver.ccp.knowtator.view.menu.AnnotationPopupMenu; - -import javax.swing.*; -import javax.swing.text.*; -import java.awt.*; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import java.util.Set; - -import static java.lang.Math.max; -import static java.lang.Math.min; - -public abstract class KnowtatorTextPane extends JTextPane - implements ProfileSelectionListener, - TextSourceSelectionListener, - AnnotationSelectionListener, - SpanSelectionListener, - ProjectListener, - ColorListener { - - KnowtatorView view; - - KnowtatorTextPane(KnowtatorView view) { - super(); - this.view = view; - view.getController().getSelectionManager().addTextSourceListener(this); - view.getController().getSelectionManager().addAnnotationListener(this); - view.getController().getSelectionManager().addProfileListener(this); - view.getController().getSelectionManager().addSpanListener(this); - view.getController().getProfileManager().addColorListener(this); - - getCaret().setVisible(true); - addCaretListener(view.getController().getSelectionManager()); - - setupListeners(); - requestFocusInWindow(); - select(0, 0); - } - - abstract void showTextPane(TextSource textSource); - - private void setupListeners() { - addMouseListener( - new MouseListener() { - int press_offset; - - @Override - public void mousePressed(MouseEvent e) { - press_offset = viewToModel(e.getPoint()); - } - - @Override - public void mouseReleased(MouseEvent e) { - handleMouseRelease(e, press_offset, viewToModel(e.getPoint())); - } - - @Override - public void mouseEntered(MouseEvent e) {} - - @Override - public void mouseExited(MouseEvent e) {} - - @Override - public void mouseClicked(MouseEvent e) {} - }); - } - - private void handleMouseRelease(MouseEvent e, int press_offset, int release_offset) { - if (view.getController().getSelectionManager().getActiveTextSource() != null) { - AnnotationPopupMenu popupMenu = new AnnotationPopupMenu(e, view); - - Set spansContainingLocation = getSpans(press_offset); - - if (SwingUtilities.isRightMouseButton(e)) { - if (spansContainingLocation.size() == 1) { - Span span = spansContainingLocation.iterator().next(); - view.getController().getSelectionManager().setSelectedSpan(span); - } - popupMenu.showPopUpMenu(release_offset); - } else if (press_offset == release_offset) { - if (spansContainingLocation.size() == 1) { - Span span = spansContainingLocation.iterator().next(); - view.getController().getSelectionManager().setSelectedSpan(span); - } else if (spansContainingLocation.size() > 1) { - popupMenu.chooseAnnotation(spansContainingLocation); - } - - } else { - view.getController().getSelectionManager().setSelectedAnnotation(null, null); - setSelectionAtWordLimits(press_offset, release_offset); - } - } - } - - private void setSelectionAtWordLimits(int press_offset, int release_offset) { - - try { - int start = Utilities.getWordStart(this, min(press_offset, release_offset)); - int end = Utilities.getWordEnd(this, max(press_offset, release_offset)); - requestFocusInWindow(); - select(start, end); - - } catch (BadLocationException e) { - e.printStackTrace(); - } - } - - void refreshHighlights() { - if (view.getController().getSelectionManager().getActiveTextSource() != null) { - - if (view.getController().getSelectionManager().getSelectedSpan() != null) { - try { - scrollRectToVisible( - modelToView(view.getController().getSelectionManager().getSelectedSpan().getStart())); - } catch (BadLocationException | NullPointerException ignored) { - - } - } - - Profile profile = view.getController().getSelectionManager().getActiveProfile(); - - // Remove all previous highlights in case a span has been deleted - getHighlighter().removeAllHighlights(); - - // Always highlight the selected annotation first so its color and border show up - highlightSelectedAnnotation(); - - // Highlight overlaps first, then spans - Span lastSpan = null; - Color lastColor = null; - - Set spans = getSpans(null); - for (Span span : spans) { - if (lastSpan != null) { - if (span.intersects(lastSpan)) { - try { - highlightSpan( - span.getStart(), - min(span.getEnd(), lastSpan.getEnd()), - new DefaultHighlighter.DefaultHighlightPainter(Color.LIGHT_GRAY)); - } catch (BadLocationException e) { - e.printStackTrace(); - } - } - if (span.getEnd() > lastSpan.getEnd()) { - try { - highlightSpan( - lastSpan.getStart(), - lastSpan.getEnd(), - new DefaultHighlighter.DefaultHighlightPainter(lastColor)); - } catch (BadLocationException e) { - e.printStackTrace(); - } - } - } - lastSpan = span; - - lastColor = profile.getColor(span.getAnnotation()); - } - if (lastSpan != null) { - - // Highlight remaining span - try { - highlightSpan( - lastSpan.getStart(), - lastSpan.getEnd(), - new DefaultHighlighter.DefaultHighlightPainter(lastColor)); - } catch (BadLocationException e) { - e.printStackTrace(); - } - } - - revalidate(); - repaint(); - } - } - - public abstract void highlightSpan( - int start, int end, DefaultHighlighter.DefaultHighlightPainter highlighter) - throws BadLocationException; - - protected abstract Set getSpans(Integer loc); - - private void highlightSelectedAnnotation() { - if (view.getController().getSelectionManager().getSelectedAnnotation() != null) { - for (Span span : - view.getController() - .getSelectionManager() - .getSelectedAnnotation() - .getSpanCollection() - .getCollection()) { - try { - if (span.equalStartAndEnd(view.getController().getSelectionManager().getSelectedSpan())) { - highlightSpan(span.getStart(), span.getEnd(), new RectanglePainter(Color.BLACK)); - } else { - highlightSpan(span.getStart(), span.getEnd(), new RectanglePainter(Color.GRAY)); - } - } catch (BadLocationException e) { - e.printStackTrace(); - } - } - } - } - - @Override - public void selectedAnnotationChanged(AnnotationChangeEvent e) { - refreshHighlights(); - } - - @Override - public void selectedSpanChanged(SpanChangeEvent e) { - refreshHighlights(); - } - - @Override - public void activeTextSourceChanged(TextSourceChangeEvent e) { - showTextPane(e.getNew()); - refreshHighlights(); - } - - @Override - public void activeProfileChange(ProfileChangeEvent e) { - refreshHighlights(); - } - - @Override - public void projectClosed() {} - - @Override - public void projectLoaded() { - showTextPane(view.getController().getSelectionManager().getActiveTextSource()); - } - - public void decreaseFontSize() { - StyledDocument doc = getStyledDocument(); - MutableAttributeSet attrs = getInputAttributes(); - Font font = doc.getFont(attrs); - StyleConstants.setFontSize(attrs, font.getSize() - 2); - doc.setCharacterAttributes(0, doc.getLength() + 1, attrs, false); - repaint(); - } - - public void increaseFindSize() { - StyledDocument doc = getStyledDocument(); - MutableAttributeSet attrs = getInputAttributes(); - Font font = doc.getFont(attrs); - StyleConstants.setFontSize(attrs, font.getSize() + 2); - doc.setCharacterAttributes(0, doc.getLength() + 1, attrs, false); - repaint(); - } - - public void growStart() { - select(getSelectionStart() - 1, getSelectionEnd()); - } - - public void shrinkStart() { - select(getSelectionStart() + 1, getSelectionEnd()); - } - - public void shrinkEnd() { - select(getSelectionStart(), getSelectionEnd() - 1); - } - - public void growEnd() { - select(getSelectionStart(), getSelectionEnd() + 1); - } - - @Override - public void colorChanged() { - refreshHighlights(); - } -} +package edu.ucdenver.ccp.knowtator.view.textpane; + +import edu.ucdenver.ccp.knowtator.events.AnnotationChangeEvent; +import edu.ucdenver.ccp.knowtator.events.ProfileChangeEvent; +import edu.ucdenver.ccp.knowtator.events.SpanChangeEvent; +import edu.ucdenver.ccp.knowtator.events.TextSourceChangeEvent; +import edu.ucdenver.ccp.knowtator.listeners.*; +import edu.ucdenver.ccp.knowtator.model.Profile; +import edu.ucdenver.ccp.knowtator.model.Span; +import edu.ucdenver.ccp.knowtator.model.TextSource; +import edu.ucdenver.ccp.knowtator.view.KnowtatorView; +import edu.ucdenver.ccp.knowtator.view.menu.AnnotationPopupMenu; + +import javax.swing.*; +import javax.swing.text.*; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.util.Set; + +import static java.lang.Math.max; +import static java.lang.Math.min; + +public abstract class KnowtatorTextPane extends JTextPane + implements ProfileSelectionListener, + TextSourceSelectionListener, + AnnotationSelectionListener, + SpanSelectionListener, + ProjectListener, + ColorListener { + + KnowtatorView view; + + KnowtatorTextPane(KnowtatorView view) { + super(); + this.view = view; + view.getController().getSelectionManager().addTextSourceListener(this); + view.getController().getSelectionManager().addAnnotationListener(this); + view.getController().getSelectionManager().addProfileListener(this); + view.getController().getSelectionManager().addSpanListener(this); + view.getController().getProfileManager().addColorListener(this); + + getCaret().setVisible(true); + addCaretListener(view.getController().getSelectionManager()); + + setupListeners(); + requestFocusInWindow(); + select(0, 0); + } + + abstract void showTextPane(TextSource textSource); + + private void setupListeners() { + addMouseListener( + new MouseListener() { + int press_offset; + + @Override + public void mousePressed(MouseEvent e) { + press_offset = viewToModel(e.getPoint()); + } + + @Override + public void mouseReleased(MouseEvent e) { + handleMouseRelease(e, press_offset, viewToModel(e.getPoint())); + } + + @Override + public void mouseEntered(MouseEvent e) {} + + @Override + public void mouseExited(MouseEvent e) {} + + @Override + public void mouseClicked(MouseEvent e) {} + }); + } + + private void handleMouseRelease(MouseEvent e, int press_offset, int release_offset) { + if (view.getController().getSelectionManager().getActiveTextSource() != null) { + AnnotationPopupMenu popupMenu = new AnnotationPopupMenu(e, view); + + Set spansContainingLocation = getSpans(press_offset); + + if (SwingUtilities.isRightMouseButton(e)) { + if (spansContainingLocation.size() == 1) { + Span span = spansContainingLocation.iterator().next(); + view.getController().getSelectionManager().setSelectedSpan(span); + } + popupMenu.showPopUpMenu(release_offset); + } else if (press_offset == release_offset) { + if (spansContainingLocation.size() == 1) { + Span span = spansContainingLocation.iterator().next(); + view.getController().getSelectionManager().setSelectedSpan(span); + } else if (spansContainingLocation.size() > 1) { + popupMenu.chooseAnnotation(spansContainingLocation); + } + + } else { + view.getController().getSelectionManager().setSelectedAnnotation(null, null); + setSelectionAtWordLimits(press_offset, release_offset); + } + } + } + + private void setSelectionAtWordLimits(int press_offset, int release_offset) { + + try { + int start = Utilities.getWordStart(this, min(press_offset, release_offset)); + int end = Utilities.getWordEnd(this, max(press_offset, release_offset)); + requestFocusInWindow(); + select(start, end); + + } catch (BadLocationException e) { + e.printStackTrace(); + } + } + + void refreshHighlights() { + if (view.getController().getSelectionManager().getActiveTextSource() != null) { + + if (view.getController().getSelectionManager().getSelectedSpan() != null) { + try { + scrollRectToVisible( + modelToView(view.getController().getSelectionManager().getSelectedSpan().getStart())); + } catch (BadLocationException | NullPointerException ignored) { + + } + } + + Profile profile = view.getController().getSelectionManager().getActiveProfile(); + + // Remove all previous highlights in case a span has been deleted + getHighlighter().removeAllHighlights(); + + // Always highlight the selected annotation first so its color and border show up + highlightSelectedAnnotation(); + + // Highlight overlaps first, then spans + Span lastSpan = null; + Color lastColor = null; + + Set spans = getSpans(null); + for (Span span : spans) { + if (lastSpan != null) { + if (span.intersects(lastSpan)) { + try { + highlightSpan( + span.getStart(), + min(span.getEnd(), lastSpan.getEnd()), + new DefaultHighlighter.DefaultHighlightPainter(Color.LIGHT_GRAY)); + } catch (BadLocationException e) { + e.printStackTrace(); + } + } + if (span.getEnd() > lastSpan.getEnd()) { + try { + highlightSpan( + lastSpan.getStart(), + lastSpan.getEnd(), + new DefaultHighlighter.DefaultHighlightPainter(lastColor)); + } catch (BadLocationException e) { + e.printStackTrace(); + } + } + } + lastSpan = span; + + lastColor = profile.getColor(span.getAnnotation()); + } + if (lastSpan != null) { + + // Highlight remaining span + try { + highlightSpan( + lastSpan.getStart(), + lastSpan.getEnd(), + new DefaultHighlighter.DefaultHighlightPainter(lastColor)); + } catch (BadLocationException e) { + e.printStackTrace(); + } + } + + revalidate(); + repaint(); + } + } + + public abstract void highlightSpan( + int start, int end, DefaultHighlighter.DefaultHighlightPainter highlighter) + throws BadLocationException; + + protected abstract Set getSpans(Integer loc); + + private void highlightSelectedAnnotation() { + if (view.getController().getSelectionManager().getSelectedAnnotation() != null) { + for (Span span : + view.getController() + .getSelectionManager() + .getSelectedAnnotation() + .getSpanCollection() + .getCollection()) { + try { + if (span.equalStartAndEnd(view.getController().getSelectionManager().getSelectedSpan())) { + highlightSpan(span.getStart(), span.getEnd(), new RectanglePainter(Color.BLACK)); + } else { + highlightSpan(span.getStart(), span.getEnd(), new RectanglePainter(Color.GRAY)); + } + } catch (BadLocationException e) { + e.printStackTrace(); + } + } + } + } + + @Override + public void selectedAnnotationChanged(AnnotationChangeEvent e) { + refreshHighlights(); + } + + @Override + public void selectedSpanChanged(SpanChangeEvent e) { + refreshHighlights(); + } + + @Override + public void activeTextSourceChanged(TextSourceChangeEvent e) { + showTextPane(e.getNew()); + refreshHighlights(); + } + + @Override + public void activeProfileChange(ProfileChangeEvent e) { + refreshHighlights(); + } + + @Override + public void projectClosed() {} + + @Override + public void projectLoaded() { + showTextPane(view.getController().getSelectionManager().getActiveTextSource()); + } + + public void decreaseFontSize() { + StyledDocument doc = getStyledDocument(); + MutableAttributeSet attrs = getInputAttributes(); + Font font = doc.getFont(attrs); + StyleConstants.setFontSize(attrs, font.getSize() - 2); + doc.setCharacterAttributes(0, doc.getLength() + 1, attrs, false); + repaint(); + } + + public void increaseFindSize() { + StyledDocument doc = getStyledDocument(); + MutableAttributeSet attrs = getInputAttributes(); + Font font = doc.getFont(attrs); + StyleConstants.setFontSize(attrs, font.getSize() + 2); + doc.setCharacterAttributes(0, doc.getLength() + 1, attrs, false); + repaint(); + } + + public void growStart() { + select(getSelectionStart() - 1, getSelectionEnd()); + } + + public void shrinkStart() { + select(getSelectionStart() + 1, getSelectionEnd()); + } + + public void shrinkEnd() { + select(getSelectionStart(), getSelectionEnd() - 1); + } + + public void growEnd() { + select(getSelectionStart(), getSelectionEnd() + 1); + } + + @Override + public void colorChanged() { + refreshHighlights(); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/textpane/MainKnowtatorTextPane.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/textpane/MainKnowtatorTextPane.java index 8e61a481..be0a5dbc 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/textpane/MainKnowtatorTextPane.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/textpane/MainKnowtatorTextPane.java @@ -1,39 +1,39 @@ -package edu.ucdenver.ccp.knowtator.view.textpane; - -import edu.ucdenver.ccp.knowtator.model.Span; -import edu.ucdenver.ccp.knowtator.model.TextSource; -import edu.ucdenver.ccp.knowtator.view.KnowtatorView; - -import javax.swing.text.BadLocationException; -import javax.swing.text.DefaultHighlighter; -import java.util.Set; - -public class MainKnowtatorTextPane extends KnowtatorTextPane { - public MainKnowtatorTextPane( KnowtatorView view) { - super(view); - view.getController().getProjectManager().addListener(this); - getCaret().setSelectionVisible(true); - } - - @Override - void showTextPane(TextSource textSource) { - setText(textSource.getContent()); - refreshHighlights(); - } - - @Override - public void highlightSpan( - int start, int end, DefaultHighlighter.DefaultHighlightPainter highlighter) - throws BadLocationException { - getHighlighter().addHighlight(start, end, highlighter); - } - - @Override - protected Set getSpans(Integer loc) { - return view.getController() - .getSelectionManager() - .getActiveTextSource() - .getAnnotationManager() - .getSpans(loc, 0, getText().length()); - } -} +package edu.ucdenver.ccp.knowtator.view.textpane; + +import edu.ucdenver.ccp.knowtator.model.Span; +import edu.ucdenver.ccp.knowtator.model.TextSource; +import edu.ucdenver.ccp.knowtator.view.KnowtatorView; + +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultHighlighter; +import java.util.Set; + +public class MainKnowtatorTextPane extends KnowtatorTextPane { + public MainKnowtatorTextPane( KnowtatorView view) { + super(view); + view.getController().getProjectManager().addListener(this); + getCaret().setSelectionVisible(true); + } + + @Override + void showTextPane(TextSource textSource) { + setText(textSource.getContent()); + refreshHighlights(); + } + + @Override + public void highlightSpan( + int start, int end, DefaultHighlighter.DefaultHighlightPainter highlighter) + throws BadLocationException { + getHighlighter().addHighlight(start, end, highlighter); + } + + @Override + protected Set getSpans(Integer loc) { + return view.getController() + .getSelectionManager() + .getActiveTextSource() + .getAnnotationManager() + .getSpans(loc, 0, getText().length()); + } +} diff --git a/src/main/java/edu/ucdenver/ccp/knowtator/view/textpane/RectanglePainter.java b/src/main/java/edu/ucdenver/ccp/knowtator/view/textpane/RectanglePainter.java index 456f29f1..099c5c55 100644 --- a/src/main/java/edu/ucdenver/ccp/knowtator/view/textpane/RectanglePainter.java +++ b/src/main/java/edu/ucdenver/ccp/knowtator/view/textpane/RectanglePainter.java @@ -1,85 +1,85 @@ -package edu.ucdenver.ccp.knowtator.view.textpane; - -import org.apache.log4j.Logger; - -import javax.swing.text.*; -import java.awt.*; - -/* - * Implements a simple highlight painter that renders a rectangle around the - * area to be highlighted. - * - */ -public class RectanglePainter extends DefaultHighlighter.DefaultHighlightPainter { - - public static Logger log = Logger.getLogger(RectanglePainter.class); - - RectanglePainter(Color color) { - super(color); - } - - /** - * Paints a portion of a highlight. - * - * @param g the graphics context - * @param offs0 the starting model offset >= 0 - * @param offs1 the ending model offset >= offs1 - * @param bounds the bounding box of the view, which is not necessarily the region to paint. - * @param c the editor - * @param view View painting for - * @return region drawing occured in - */ - public Shape paintLayer( - Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c, View view) { - Rectangle r = getDrawingArea(offs0, offs1, bounds, view); - - if (r == null) return null; - - // Do your custom painting - - Color color = getColor(); - g.setColor(color == null ? c.getSelectionColor() : color); - - ((Graphics2D) g).setStroke(new BasicStroke(4)); - - // Code is the same as the default highlighter except we use drawRect(...) - - // g.fillRect(r.x, r.y, r.width, r.height); - g.drawRect(r.x, r.y, r.width - 1, r.height - 1); - - // Return the drawing area - - return r; - } - - private Rectangle getDrawingArea(int offs0, int offs1, Shape bounds, View view) { - // Contained in view, can just use bounds. - - if (offs0 == view.getStartOffset() && offs1 == view.getEndOffset()) { - Rectangle alloc; - - if (bounds instanceof Rectangle) { - alloc = (Rectangle) bounds; - } else { - alloc = bounds.getBounds(); - } - - return alloc; - } else { - // Should only render part of View. - try { - // --- determine locations --- - Shape shape = - view.modelToView(offs0, Position.Bias.Forward, offs1, Position.Bias.Backward, bounds); - - return (shape instanceof Rectangle) ? (Rectangle) shape : shape.getBounds(); - } catch (BadLocationException e) { - // can't render - } - } - - // Can't render - - return null; - } -} +package edu.ucdenver.ccp.knowtator.view.textpane; + +import org.apache.log4j.Logger; + +import javax.swing.text.*; +import java.awt.*; + +/* + * Implements a simple highlight painter that renders a rectangle around the + * area to be highlighted. + * + */ +public class RectanglePainter extends DefaultHighlighter.DefaultHighlightPainter { + + public static Logger log = Logger.getLogger(RectanglePainter.class); + + RectanglePainter(Color color) { + super(color); + } + + /** + * Paints a portion of a highlight. + * + * @param g the graphics context + * @param offs0 the starting model offset >= 0 + * @param offs1 the ending model offset >= offs1 + * @param bounds the bounding box of the view, which is not necessarily the region to paint. + * @param c the editor + * @param view View painting for + * @return region drawing occured in + */ + public Shape paintLayer( + Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c, View view) { + Rectangle r = getDrawingArea(offs0, offs1, bounds, view); + + if (r == null) return null; + + // Do your custom painting + + Color color = getColor(); + g.setColor(color == null ? c.getSelectionColor() : color); + + ((Graphics2D) g).setStroke(new BasicStroke(4)); + + // Code is the same as the default highlighter except we use drawRect(...) + + // g.fillRect(r.x, r.y, r.width, r.height); + g.drawRect(r.x, r.y, r.width - 1, r.height - 1); + + // Return the drawing area + + return r; + } + + private Rectangle getDrawingArea(int offs0, int offs1, Shape bounds, View view) { + // Contained in view, can just use bounds. + + if (offs0 == view.getStartOffset() && offs1 == view.getEndOffset()) { + Rectangle alloc; + + if (bounds instanceof Rectangle) { + alloc = (Rectangle) bounds; + } else { + alloc = bounds.getBounds(); + } + + return alloc; + } else { + // Should only render part of View. + try { + // --- determine locations --- + Shape shape = + view.modelToView(offs0, Position.Bias.Forward, offs1, Position.Bias.Backward, bounds); + + return (shape instanceof Rectangle) ? (Rectangle) shape : shape.getBounds(); + } catch (BadLocationException e) { + // can't render + } + } + + // Can't render + + return null; + } +} diff --git a/src/main/resources/ui.properties b/src/main/resources/ui.properties index 4e869517..9b497d26 100644 --- a/src/main/resources/ui.properties +++ b/src/main/resources/ui.properties @@ -1,39 +1,39 @@ -add.annotation=Add annotation -add.annotation.node=Add annotation node -annotation.information=Annotation Information -apply.layout=&Apply Layout -apply.layout1=Apply layout -assign.color.to.class=Assign color to class -case.sensitive=&Case Sensitive -choose.profile=Choose profile -choose.text.source=Choose text source -decrease.font.size=Decrease font size -document=Document -filter.annotations.by.profile=Filter annotations by profile -find=Find -graph.space=Graph Space -grow.selection.end=Grow selection end -grow.selection.start=Grow selection start -increase.font.size=Increase font size -knowator.project=&Knowtator Project -label=Label -next=&Next -next.graph.space=Next graph space -next.span=Next span -next.text.source=Next text source -previous=Pr&evious -previous.graph.space=Previous graph space -previous.span=Previous span -previous.text.source=Previous text source -profile=Profile -profile.filter=&Profile Filter -regex=&Regex -remove.annotation=Remove annotation -remove.item=Remove item -send.selected.text.to.graph=Send selected text to graph -show.graph.viewer=Show graph viewer -shrink.selection.end=Shrink selection end -shrink.selection.start=Shrink selection start -text.to.graph=&Text to graph -zoom.in=Zoom in +add.annotation=Add annotation +add.annotation.node=Add annotation node +annotation.information=Annotation Information +apply.layout=&Apply Layout +apply.layout1=Apply layout +assign.color.to.class=Assign color to class +case.sensitive=&Case Sensitive +choose.profile=Choose profile +choose.text.source=Choose text source +decrease.font.size=Decrease font size +document=Document +filter.annotations.by.profile=Filter annotations by profile +find=Find +graph.space=Graph Space +grow.selection.end=Grow selection end +grow.selection.start=Grow selection start +increase.font.size=Increase font size +knowator.project=&Knowtator Project +label=Label +next=&Next +next.graph.space=Next graph space +next.span=Next span +next.text.source=Next text source +previous=Pr&evious +previous.graph.space=Previous graph space +previous.span=Previous span +previous.text.source=Previous text source +profile=Profile +profile.filter=&Profile Filter +regex=&Regex +remove.annotation=Remove annotation +remove.item=Remove item +send.selected.text.to.graph=Send selected text to graph +show.graph.viewer=Show graph viewer +shrink.selection.end=Shrink selection end +shrink.selection.start=Shrink selection start +text.to.graph=&Text to graph +zoom.in=Zoom in zoom.out=Zoom out \ No newline at end of file diff --git a/src/test/java/edu/ucdenver/ccp/knowtator/AnnotationManagerTest.java b/src/test/java/edu/ucdenver/ccp/knowtator/AnnotationManagerTest.java index 40073f39..13d00ead 100644 --- a/src/test/java/edu/ucdenver/ccp/knowtator/AnnotationManagerTest.java +++ b/src/test/java/edu/ucdenver/ccp/knowtator/AnnotationManagerTest.java @@ -1,127 +1,127 @@ -package edu.ucdenver.ccp.knowtator; - -import edu.ucdenver.ccp.knowtator.model.*; -import org.apache.log4j.Logger; -import org.junit.Test; - -import java.io.File; - -@SuppressWarnings("unused") -public class AnnotationManagerTest { - private static final Logger log = Logger.getLogger(AnnotationManagerTest.class); - - - private String[] projectFileNames = new String[]{"test_project", "old_project"}; - private String[] articleFileNames = new String[]{"document1", "document2"}; - private String[] articleContent = new String[]{ - "This is a test document.", - "A second test document has appeared!" - }; - private String[] profileFileNames = new String[]{"profile1", "profile2"}; - private AnnotationManager annotationManager; - private TextSource textSource; - private Profile profile; - private KnowtatorController controller; - - private File getProjectFile(String projectName) { - return new File(getClass().getResource(String.format( - "/%s/%s.knowtator", - projectName, - projectName) - ).getFile()); - } - - private File getArticleFile(String projectName, String articleName) { - return new File(getClass().getResource(String.format( - "/%s/Articles/%s.txt", - projectName, - articleName) - ).getFile()); - } - - public void setUp() { - controller = new KnowtatorController(); - - int projectID = 0; - int articleID = 0; - String projectFileName = projectFileNames[projectID]; - File project = getProjectFile(projectFileName); - String articleName = articleFileNames[articleID]; - - controller.getProjectManager().loadProject(project); - - //noinspection ConstantConditions - textSource = controller.getTextSourceManager().getTextSourceCollection().getCollection().stream().filter(textSource1 -> textSource1.getId().equals(articleName)).findAny().get(); - annotationManager = textSource.getAnnotationManager(); - profile = controller.getProfileManager().addProfile("Default"); - - } - - @Test - public void addAnnotation() { - setUp(); - Annotation annotation1 = new Annotation(controller, "mention_3", null, "class_2", profile, "identity", textSource); - annotationManager.addAnnotation(annotation1); - - int numAnnotations = annotationManager.getAnnotations().getCollection().size(); - int numSpans = annotationManager.getSpans(null, 0, textSource.getContent().length()).size(); - - assert numAnnotations == 3; - assert numSpans == 3; - } - - @Test - public void addSpanToAnnotation() { - setUp(); - Annotation annotation1 = new Annotation(controller, "mention_3", null, "class_2", profile, "identity", textSource); - annotationManager.addAnnotation(annotation1); - - Span span1 = new Span(null, 1, 6, textSource, controller); - annotationManager.addSpanToAnnotation(annotation1, span1); - - int numAnnotations = annotationManager.getAnnotations().getCollection().size(); - int numSpans = annotationManager.getSpans(null, 0, textSource.getContent().length()).size(); - - assert numAnnotations == 3; - assert numSpans == 4; - } - - @Test - public void removeAnnotation() { - setUp(); - annotationManager.removeAnnotation(annotationManager.getAnnotation("mention_1")); - - int numAnnotations = annotationManager.getAnnotations().getCollection().size(); - int numSpans = annotationManager.getSpans(null, 0, textSource.getContent().length()).size(); - - assert numAnnotations == 1; - try { - assert numSpans == 1; - } catch (AssertionError ae) { - annotationManager.getSpans(null, 0, textSource.getContent().length()).forEach((span -> log.warn(String.format("%s, %s", span, span.getAnnotation())))); - throw new AssertionError(); - } - } - - @Test - public void removeSpanFromAnnotation() { - setUp(); - Annotation annotation1 = new Annotation(controller, "mention_3", null, "class_2", profile, "identity", textSource); - annotationManager.addAnnotation(annotation1); - - Span span1 = new Span(null, 1, 6, textSource, controller); - annotationManager.addSpanToAnnotation(annotation1, span1); - - annotationManager.removeSpanFromAnnotation(annotation1, span1); - int numAnnotations = annotationManager.getAnnotations().getCollection().size(); - int numSpans = annotationManager.getSpans(null, 0, textSource.getContent().length()).size(); - - assert numAnnotations == 3; - try { - assert numSpans == 3; - } catch (AssertionError ae) { - annotationManager.getSpans(null, 0, textSource.getContent().length()).forEach((span -> log.warn(String.format("%s, %s", span, span.getAnnotation())))); - throw new AssertionError(); - } - } -} +package edu.ucdenver.ccp.knowtator; + +import edu.ucdenver.ccp.knowtator.model.*; +import org.apache.log4j.Logger; +import org.junit.Test; + +import java.io.File; + +@SuppressWarnings("unused") +public class AnnotationManagerTest { + private static final Logger log = Logger.getLogger(AnnotationManagerTest.class); + + + private String[] projectFileNames = new String[]{"test_project", "old_project"}; + private String[] articleFileNames = new String[]{"document1", "document2"}; + private String[] articleContent = new String[]{ + "This is a test document.", + "A second test document has appeared!" + }; + private String[] profileFileNames = new String[]{"profile1", "profile2"}; + private AnnotationManager annotationManager; + private TextSource textSource; + private Profile profile; + private KnowtatorController controller; + + private File getProjectFile(String projectName) { + return new File(getClass().getResource(String.format( + "/%s/%s.knowtator", + projectName, + projectName) + ).getFile()); + } + + private File getArticleFile(String projectName, String articleName) { + return new File(getClass().getResource(String.format( + "/%s/Articles/%s.txt", + projectName, + articleName) + ).getFile()); + } + + public void setUp() { + controller = new KnowtatorController(); + + int projectID = 0; + int articleID = 0; + String projectFileName = projectFileNames[projectID]; + File project = getProjectFile(projectFileName); + String articleName = articleFileNames[articleID]; + + controller.getProjectManager().loadProject(project); + + //noinspection ConstantConditions + textSource = controller.getTextSourceManager().getTextSourceCollection().getCollection().stream().filter(textSource1 -> textSource1.getId().equals(articleName)).findAny().get(); + annotationManager = textSource.getAnnotationManager(); + profile = controller.getProfileManager().addProfile("Default"); + + } + + @Test + public void addAnnotation() { + setUp(); + Annotation annotation1 = new Annotation(controller, "mention_3", null, "class_2", profile, "identity", textSource); + annotationManager.addAnnotation(annotation1); + + int numAnnotations = annotationManager.getAnnotations().getCollection().size(); + int numSpans = annotationManager.getSpans(null, 0, textSource.getContent().length()).size(); + + assert numAnnotations == 3; + assert numSpans == 3; + } + + @Test + public void addSpanToAnnotation() { + setUp(); + Annotation annotation1 = new Annotation(controller, "mention_3", null, "class_2", profile, "identity", textSource); + annotationManager.addAnnotation(annotation1); + + Span span1 = new Span(null, 1, 6, textSource, controller); + annotationManager.addSpanToAnnotation(annotation1, span1); + + int numAnnotations = annotationManager.getAnnotations().getCollection().size(); + int numSpans = annotationManager.getSpans(null, 0, textSource.getContent().length()).size(); + + assert numAnnotations == 3; + assert numSpans == 4; + } + + @Test + public void removeAnnotation() { + setUp(); + annotationManager.removeAnnotation(annotationManager.getAnnotation("mention_1")); + + int numAnnotations = annotationManager.getAnnotations().getCollection().size(); + int numSpans = annotationManager.getSpans(null, 0, textSource.getContent().length()).size(); + + assert numAnnotations == 1; + try { + assert numSpans == 1; + } catch (AssertionError ae) { + annotationManager.getSpans(null, 0, textSource.getContent().length()).forEach((span -> log.warn(String.format("%s, %s", span, span.getAnnotation())))); + throw new AssertionError(); + } + } + + @Test + public void removeSpanFromAnnotation() { + setUp(); + Annotation annotation1 = new Annotation(controller, "mention_3", null, "class_2", profile, "identity", textSource); + annotationManager.addAnnotation(annotation1); + + Span span1 = new Span(null, 1, 6, textSource, controller); + annotationManager.addSpanToAnnotation(annotation1, span1); + + annotationManager.removeSpanFromAnnotation(annotation1, span1); + int numAnnotations = annotationManager.getAnnotations().getCollection().size(); + int numSpans = annotationManager.getSpans(null, 0, textSource.getContent().length()).size(); + + assert numAnnotations == 3; + try { + assert numSpans == 3; + } catch (AssertionError ae) { + annotationManager.getSpans(null, 0, textSource.getContent().length()).forEach((span -> log.warn(String.format("%s, %s", span, span.getAnnotation())))); + throw new AssertionError(); + } + } +} diff --git a/src/test/java/edu/ucdenver/ccp/knowtator/IOTests.java b/src/test/java/edu/ucdenver/ccp/knowtator/IOTests.java index 3ecc8d1f..e362f4c3 100644 --- a/src/test/java/edu/ucdenver/ccp/knowtator/IOTests.java +++ b/src/test/java/edu/ucdenver/ccp/knowtator/IOTests.java @@ -1,432 +1,432 @@ -package edu.ucdenver.ccp.knowtator; - -import com.google.common.io.Files; -import edu.ucdenver.ccp.knowtator.io.brat.BratStandoffUtil; -import edu.ucdenver.ccp.knowtator.model.AnnotationManager; -import edu.ucdenver.ccp.knowtator.model.AnnotationNode; -import edu.ucdenver.ccp.knowtator.model.GraphSpace; -import edu.ucdenver.ccp.knowtator.model.TextSource; -import org.apache.commons.io.FileUtils; -import org.apache.log4j.Logger; -import org.junit.Test; - -import java.io.File; -import java.io.IOException; - -@SuppressWarnings("ConstantConditions") -public class IOTests { - @SuppressWarnings("unused") - private static final Logger log = Logger.getLogger(IOTests.class); - - private KnowtatorController controller; - - private String[] projectFileNames = - new String[]{"test_project", "old_project", "test_load_old_coreference", "CRAFT_assertions"}; - private String[] articleFileNames = - new String[]{ - "document1", "document2", "document3", "document1_old", "brat_test", "small_11319941" - }; - private String[] articleContent = - new String[]{ - "This is a test document.", - "A second test document has appeared!", - "And another one!", - "This is a test document." - }; - // private String[] profileFileNames = new String[]{"profile1", "profile2"}; - - private File getProjectFile(String projectName) { - return new File( - getClass() - .getResource(String.format("/%s/%s.knowtator", projectName, projectName)) - .getFile()); - } - - private File getArticleFile(String projectName, String articleName) { - return new File( - getClass() - .getResource(String.format("/%s/Articles/%s.txt", projectName, articleName)) - .getFile()); - } - - private File getBratFile(String projectName, String bratFileName) { - return new File( - getClass() - .getResource(String.format("/%s/Annotations/%s.ann", projectName, bratFileName)) - .getFile()); - } - - // @Test - // public void loadLargeOld() { - // controller = new KnowtatorController(); - // - // int projectID = 3; - // String projectFileName = projectFileNames[projectID]; - // File projectFile = getProjectFile(projectFileName); - // - // controller.getProjectManager().loadProject(projectFile); - // } - - @Test - public void successfulLoad() { - controller = new KnowtatorController(); - - int projectID = 0; - int articleID = 0; - int articleID2 = 2; - String projectFileName = projectFileNames[projectID]; - File projectFile = getProjectFile(projectFileName); - - controller.getProjectManager().loadProject(projectFile); - - TextSource textSource = - controller - .getTextSourceManager() - .getTextSourceCollection() - .getCollection() - .stream() - .filter(textSource1 -> textSource1.getId().equals(articleFileNames[articleID])) - .findAny() - .get(); - String content; - int numAnnotations; - int numSpans; - int numGraphSpaces; - int numVertices; - int numTriples; - AnnotationManager annotationManager; - try { - content = FileUtils.readFileToString(textSource.getTextFile(), "UTF-8"); - assert content.equals(articleContent[articleID]); - - annotationManager = textSource.getAnnotationManager(); - numAnnotations = annotationManager.getAnnotations().getCollection().size(); - numSpans = annotationManager.getSpans(null, 0, content.length()).size(); - numGraphSpaces = annotationManager.getGraphSpaceCollection().getCollection().size(); - numVertices = - annotationManager - .getGraphSpaceCollection() - .getCollection() - .stream() - .mapToInt( - graphSpace -> graphSpace.getChildVertices(graphSpace.getDefaultParent()).length) - .sum(); - numTriples = - annotationManager - .getGraphSpaceCollection() - .getCollection() - .stream() - .mapToInt( - graphSpace -> graphSpace.getChildEdges(graphSpace.getDefaultParent()).length) - .sum(); - - assert numGraphSpaces == 1 : "There were " + numGraphSpaces + " graph spaces"; - assert numVertices == 2 : "There were " + numVertices + " vertices"; - assert numTriples == 1 : "There were " + numTriples + " triples"; - assert numAnnotations == 2 : "There were " + numAnnotations + " annotations"; - assert numSpans == 3 : "There were " + numSpans + " spans"; - } catch (IOException e) { - e.printStackTrace(); - } - - textSource = - controller - .getTextSourceManager() - .getTextSourceCollection() - .getCollection() - .stream() - .filter(textSource1 -> textSource1.getId().equals(articleFileNames[articleID2])) - .findAny() - .get(); - - try { - content = FileUtils.readFileToString(textSource.getTextFile(), "UTF-8"); - assert content.equals(articleContent[articleID2]); - - annotationManager = textSource.getAnnotationManager(); - numAnnotations = annotationManager.getAnnotations().getCollection().size(); - numSpans = annotationManager.getSpans(null, 0, content.length()).size(); - numGraphSpaces = annotationManager.getGraphSpaceCollection().getCollection().size(); - numVertices = - annotationManager - .getGraphSpaceCollection() - .getCollection() - .stream() - .mapToInt( - graphSpace -> graphSpace.getChildVertices(graphSpace.getDefaultParent()).length) - .sum(); - numTriples = - annotationManager - .getGraphSpaceCollection() - .getCollection() - .stream() - .mapToInt( - graphSpace -> graphSpace.getChildEdges(graphSpace.getDefaultParent()).length) - .sum(); - - assert numGraphSpaces == 1 : "There were " + numGraphSpaces + " graph spaces"; - assert numVertices == 2 : "There were " + numVertices + " vertices"; - assert numTriples == 1 : "There were " + numTriples + " triples"; - assert numAnnotations == 1 : "There were " + numAnnotations + " annotations"; - assert numSpans == 1 : "There were " + numSpans + " spans"; - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Test - public void successfulAddDocument() { - controller = new KnowtatorController(); - - int projectID = 0; - int articleID = 1; - - String projectFileName = projectFileNames[projectID]; - File projectFile = getProjectFile(projectFileName); - - String articleFileName = articleFileNames[articleID]; - File articleFile = getArticleFile(projectFileName, articleFileName); - - controller.getProjectManager().loadProject(projectFile); - - controller.getProjectManager().addDocument(articleFile); - - TextSource textSource = - controller - .getTextSourceManager() - .getTextSourceCollection() - .getCollection() - .stream() - .filter(textSource1 -> textSource1.getId().equals(articleFileNames[articleID])) - .findAny() - .get(); - String content; - try { - content = FileUtils.readFileToString(textSource.getTextFile(), "UTF-8"); - assert content.equals(articleContent[articleID]); - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Test - public void successfulMakeNew() { - controller = new KnowtatorController(); - - File newProject = Files.createTempDir(); - controller.getProjectManager().newProject(newProject); - - assert new File(newProject, "Articles").exists(); - assert new File(newProject, "Annotations").exists(); - assert new File(newProject, "Ontologies").exists(); - assert new File(newProject, "Profiles").exists(); - - newProject.deleteOnExit(); - } - - @Test - public void successfulLoadOld() { - controller = new KnowtatorController(); - - int projectID = 1; - int articleID = 3; - - String projectFileName = projectFileNames[projectID]; - File projectFile = getProjectFile(projectFileName); - - controller.getProjectManager().loadProject(projectFile); - TextSource textSource = - controller - .getTextSourceManager() - .getTextSourceCollection() - .getCollection() - .stream() - .filter(textSource1 -> textSource1.getId().equals(articleFileNames[articleID])) - .findAny() - .get(); - String content; - try { - content = FileUtils.readFileToString(textSource.getTextFile(), "UTF-8"); - assert content.equals(articleContent[articleID]); - - AnnotationManager annotationManager1 = textSource.getAnnotationManager(); - int numAnnotations = annotationManager1.getAnnotations().getCollection().size(); - int numSpans = annotationManager1.getSpans(null, 0, content.length()).size(); - int numGraphSpaces = annotationManager1.getGraphSpaceCollection().getCollection().size(); - - assert numGraphSpaces == 1 : "There were " + numGraphSpaces + " graph spaces"; - assert numAnnotations == 2 : "There were " + numAnnotations + " annotations"; - assert numSpans == 3 : "There were " + numSpans + " spans"; - } catch (IOException e) { - e.printStackTrace(); - } - } - - @Test - public void successfulAddGraphSpace() { - controller = new KnowtatorController(); - - int projectID = 0; - int articleID = 0; - - String projectFileName = projectFileNames[projectID]; - File projectFile = getProjectFile(projectFileName); - - controller.getProjectManager().loadProject(projectFile); - - TextSource textSource = - controller - .getTextSourceManager() - .getTextSourceCollection() - .getCollection() - .stream() - .filter(textSource1 -> textSource1.getId().equals(articleFileNames[articleID])) - .findAny() - .get(); - String content; - try { - content = FileUtils.readFileToString(textSource.getTextFile(), "UTF-8"); - assert content.equals(articleContent[articleID]); - } catch (IOException e) { - e.printStackTrace(); - } - - AnnotationManager annotationManager = textSource.getAnnotationManager(); - GraphSpace graphSpace = annotationManager.addGraphSpace("graph_1"); - - AnnotationNode v1 = graphSpace.addNode("node_0", annotationManager.getAnnotation("mention_0")); - AnnotationNode v2 = graphSpace.addNode("node_1", annotationManager.getAnnotation("mention_1")); - graphSpace.addTriple( - v1, - v2, - "edge_1", - controller.getSelectionManager().getActiveProfile(), - null, "property_0", - "", ""); - - int numGraphSpaces = annotationManager.getGraphSpaceCollection().getCollection().size(); - int numVertices = - annotationManager - .getGraphSpaceCollection() - .getCollection() - .stream() - .mapToInt( - graphSpace1 -> graphSpace1.getChildVertices(graphSpace.getDefaultParent()).length) - .sum(); - int numTriples = - annotationManager - .getGraphSpaceCollection() - .getCollection() - .stream() - .mapToInt( - graphSpace1 -> graphSpace1.getChildEdges(graphSpace.getDefaultParent()).length) - .sum(); - - assert numGraphSpaces == 2 : "There were " + numGraphSpaces + " graph spaces"; - assert numVertices == 4 : "There were " + numVertices + " vertices"; - assert numTriples == 2 : "There were " + numTriples + " triples"; - } - - @Test - public void successfulSave() { - controller = new KnowtatorController(); - - int projectID = 0; - - String projectFileName = projectFileNames[projectID]; - File resourceProjectFile = getProjectFile(projectFileName); - - File projectDirectory = Files.createTempDir(); - - try { - FileUtils.copyDirectory(resourceProjectFile.getParentFile(), projectDirectory); - } catch (IOException e) { - e.printStackTrace(); - } - File projectFile = new File(projectDirectory, resourceProjectFile.getName()); - controller.getProjectManager().loadProject(projectFile); - controller.getProjectManager().saveProject(); - successfulLoad(); - - projectDirectory.deleteOnExit(); - } - - @Test - public void successfulExportToBrat() { - controller = new KnowtatorController(); - - int projectID = 0; - int articleID = 4; - String projectFileName = projectFileNames[projectID]; - File projectFile = getProjectFile(projectFileName); - String article = articleFileNames[articleID]; - - File bratAnnotationFile = getBratFile(projectFileName, article); - - File outputFile = new File("E:/Documents/Test/brat_test.ann"); - - controller.getProjectManager().loadProject(projectFile); - controller.getProjectManager().loadFromFormat(BratStandoffUtil.class, bratAnnotationFile); - controller - .getProjectManager() - .saveToFormat( - BratStandoffUtil.class, - controller - .getTextSourceManager() - .getTextSourceCollection() - .getCollection() - .stream() - .filter(textSource1 -> textSource1.getId().equals(article)) - .findAny() - .get(), - outputFile); - } - - @Test - public void successfulLoadOldCoreference() { - controller = new KnowtatorController(); - - int projectID = 2; - int articleID = 5; - String projectFileName = projectFileNames[projectID]; - File projectFile = getProjectFile(projectFileName); - - controller.getProjectManager().loadProject(projectFile); - - TextSource textSource = - controller - .getTextSourceManager() - .getTextSourceCollection() - .getCollection() - .stream() - .filter(textSource1 -> textSource1.getId().equals(articleFileNames[articleID])) - .findAny() - .get(); - - AnnotationManager annotationManager = textSource.getAnnotationManager(); - int numAnnotations = annotationManager.getAnnotations().getCollection().size(); - int numSpans = annotationManager.getSpans(null, 0, textSource.getContent().length()).size(); - int numGraphSpaces = annotationManager.getGraphSpaceCollection().getCollection().size(); - int numVertices = - annotationManager - .getGraphSpaceCollection() - .getCollection() - .stream() - .mapToInt( - graphSpace -> graphSpace.getChildVertices(graphSpace.getDefaultParent()).length) - .sum(); - int numTriples = - annotationManager - .getGraphSpaceCollection() - .getCollection() - .stream() - .mapToInt(graphSpace -> graphSpace.getChildEdges(graphSpace.getDefaultParent()).length) - .sum(); - - assert numGraphSpaces == 1 : "There were " + numGraphSpaces + " graph spaces"; - assert numVertices == 12 : "There were " + numVertices + " vertices"; - assert numTriples == 11 : "There were " + numTriples + " triples"; - assert numAnnotations == 12 : "There were " + numAnnotations + " annotations"; - assert numSpans == 12 : "There were " + numSpans + " spans"; - } -} +package edu.ucdenver.ccp.knowtator; + +import com.google.common.io.Files; +import edu.ucdenver.ccp.knowtator.io.brat.BratStandoffUtil; +import edu.ucdenver.ccp.knowtator.model.AnnotationManager; +import edu.ucdenver.ccp.knowtator.model.AnnotationNode; +import edu.ucdenver.ccp.knowtator.model.GraphSpace; +import edu.ucdenver.ccp.knowtator.model.TextSource; +import org.apache.commons.io.FileUtils; +import org.apache.log4j.Logger; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; + +@SuppressWarnings("ConstantConditions") +public class IOTests { + @SuppressWarnings("unused") + private static final Logger log = Logger.getLogger(IOTests.class); + + private KnowtatorController controller; + + private String[] projectFileNames = + new String[]{"test_project", "old_project", "test_load_old_coreference", "CRAFT_assertions"}; + private String[] articleFileNames = + new String[]{ + "document1", "document2", "document3", "document1_old", "brat_test", "small_11319941" + }; + private String[] articleContent = + new String[]{ + "This is a test document.", + "A second test document has appeared!", + "And another one!", + "This is a test document." + }; + // private String[] profileFileNames = new String[]{"profile1", "profile2"}; + + private File getProjectFile(String projectName) { + return new File( + getClass() + .getResource(String.format("/%s/%s.knowtator", projectName, projectName)) + .getFile()); + } + + private File getArticleFile(String projectName, String articleName) { + return new File( + getClass() + .getResource(String.format("/%s/Articles/%s.txt", projectName, articleName)) + .getFile()); + } + + private File getBratFile(String projectName, String bratFileName) { + return new File( + getClass() + .getResource(String.format("/%s/Annotations/%s.ann", projectName, bratFileName)) + .getFile()); + } + + // @Test + // public void loadLargeOld() { + // controller = new KnowtatorController(); + // + // int projectID = 3; + // String projectFileName = projectFileNames[projectID]; + // File projectFile = getProjectFile(projectFileName); + // + // controller.getProjectManager().loadProject(projectFile); + // } + + @Test + public void successfulLoad() { + controller = new KnowtatorController(); + + int projectID = 0; + int articleID = 0; + int articleID2 = 2; + String projectFileName = projectFileNames[projectID]; + File projectFile = getProjectFile(projectFileName); + + controller.getProjectManager().loadProject(projectFile); + + TextSource textSource = + controller + .getTextSourceManager() + .getTextSourceCollection() + .getCollection() + .stream() + .filter(textSource1 -> textSource1.getId().equals(articleFileNames[articleID])) + .findAny() + .get(); + String content; + int numAnnotations; + int numSpans; + int numGraphSpaces; + int numVertices; + int numTriples; + AnnotationManager annotationManager; + try { + content = FileUtils.readFileToString(textSource.getTextFile(), "UTF-8"); + assert content.equals(articleContent[articleID]); + + annotationManager = textSource.getAnnotationManager(); + numAnnotations = annotationManager.getAnnotations().getCollection().size(); + numSpans = annotationManager.getSpans(null, 0, content.length()).size(); + numGraphSpaces = annotationManager.getGraphSpaceCollection().getCollection().size(); + numVertices = + annotationManager + .getGraphSpaceCollection() + .getCollection() + .stream() + .mapToInt( + graphSpace -> graphSpace.getChildVertices(graphSpace.getDefaultParent()).length) + .sum(); + numTriples = + annotationManager + .getGraphSpaceCollection() + .getCollection() + .stream() + .mapToInt( + graphSpace -> graphSpace.getChildEdges(graphSpace.getDefaultParent()).length) + .sum(); + + assert numGraphSpaces == 1 : "There were " + numGraphSpaces + " graph spaces"; + assert numVertices == 2 : "There were " + numVertices + " vertices"; + assert numTriples == 1 : "There were " + numTriples + " triples"; + assert numAnnotations == 2 : "There were " + numAnnotations + " annotations"; + assert numSpans == 3 : "There were " + numSpans + " spans"; + } catch (IOException e) { + e.printStackTrace(); + } + + textSource = + controller + .getTextSourceManager() + .getTextSourceCollection() + .getCollection() + .stream() + .filter(textSource1 -> textSource1.getId().equals(articleFileNames[articleID2])) + .findAny() + .get(); + + try { + content = FileUtils.readFileToString(textSource.getTextFile(), "UTF-8"); + assert content.equals(articleContent[articleID2]); + + annotationManager = textSource.getAnnotationManager(); + numAnnotations = annotationManager.getAnnotations().getCollection().size(); + numSpans = annotationManager.getSpans(null, 0, content.length()).size(); + numGraphSpaces = annotationManager.getGraphSpaceCollection().getCollection().size(); + numVertices = + annotationManager + .getGraphSpaceCollection() + .getCollection() + .stream() + .mapToInt( + graphSpace -> graphSpace.getChildVertices(graphSpace.getDefaultParent()).length) + .sum(); + numTriples = + annotationManager + .getGraphSpaceCollection() + .getCollection() + .stream() + .mapToInt( + graphSpace -> graphSpace.getChildEdges(graphSpace.getDefaultParent()).length) + .sum(); + + assert numGraphSpaces == 1 : "There were " + numGraphSpaces + " graph spaces"; + assert numVertices == 2 : "There were " + numVertices + " vertices"; + assert numTriples == 1 : "There were " + numTriples + " triples"; + assert numAnnotations == 1 : "There were " + numAnnotations + " annotations"; + assert numSpans == 1 : "There were " + numSpans + " spans"; + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + public void successfulAddDocument() { + controller = new KnowtatorController(); + + int projectID = 0; + int articleID = 1; + + String projectFileName = projectFileNames[projectID]; + File projectFile = getProjectFile(projectFileName); + + String articleFileName = articleFileNames[articleID]; + File articleFile = getArticleFile(projectFileName, articleFileName); + + controller.getProjectManager().loadProject(projectFile); + + controller.getProjectManager().addDocument(articleFile); + + TextSource textSource = + controller + .getTextSourceManager() + .getTextSourceCollection() + .getCollection() + .stream() + .filter(textSource1 -> textSource1.getId().equals(articleFileNames[articleID])) + .findAny() + .get(); + String content; + try { + content = FileUtils.readFileToString(textSource.getTextFile(), "UTF-8"); + assert content.equals(articleContent[articleID]); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + public void successfulMakeNew() { + controller = new KnowtatorController(); + + File newProject = Files.createTempDir(); + controller.getProjectManager().newProject(newProject); + + assert new File(newProject, "Articles").exists(); + assert new File(newProject, "Annotations").exists(); + assert new File(newProject, "Ontologies").exists(); + assert new File(newProject, "Profiles").exists(); + + newProject.deleteOnExit(); + } + + @Test + public void successfulLoadOld() { + controller = new KnowtatorController(); + + int projectID = 1; + int articleID = 3; + + String projectFileName = projectFileNames[projectID]; + File projectFile = getProjectFile(projectFileName); + + controller.getProjectManager().loadProject(projectFile); + TextSource textSource = + controller + .getTextSourceManager() + .getTextSourceCollection() + .getCollection() + .stream() + .filter(textSource1 -> textSource1.getId().equals(articleFileNames[articleID])) + .findAny() + .get(); + String content; + try { + content = FileUtils.readFileToString(textSource.getTextFile(), "UTF-8"); + assert content.equals(articleContent[articleID]); + + AnnotationManager annotationManager1 = textSource.getAnnotationManager(); + int numAnnotations = annotationManager1.getAnnotations().getCollection().size(); + int numSpans = annotationManager1.getSpans(null, 0, content.length()).size(); + int numGraphSpaces = annotationManager1.getGraphSpaceCollection().getCollection().size(); + + assert numGraphSpaces == 1 : "There were " + numGraphSpaces + " graph spaces"; + assert numAnnotations == 2 : "There were " + numAnnotations + " annotations"; + assert numSpans == 3 : "There were " + numSpans + " spans"; + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Test + public void successfulAddGraphSpace() { + controller = new KnowtatorController(); + + int projectID = 0; + int articleID = 0; + + String projectFileName = projectFileNames[projectID]; + File projectFile = getProjectFile(projectFileName); + + controller.getProjectManager().loadProject(projectFile); + + TextSource textSource = + controller + .getTextSourceManager() + .getTextSourceCollection() + .getCollection() + .stream() + .filter(textSource1 -> textSource1.getId().equals(articleFileNames[articleID])) + .findAny() + .get(); + String content; + try { + content = FileUtils.readFileToString(textSource.getTextFile(), "UTF-8"); + assert content.equals(articleContent[articleID]); + } catch (IOException e) { + e.printStackTrace(); + } + + AnnotationManager annotationManager = textSource.getAnnotationManager(); + GraphSpace graphSpace = annotationManager.addGraphSpace("graph_1"); + + AnnotationNode v1 = graphSpace.addNode("node_0", annotationManager.getAnnotation("mention_0")); + AnnotationNode v2 = graphSpace.addNode("node_1", annotationManager.getAnnotation("mention_1")); + graphSpace.addTriple( + v1, + v2, + "edge_1", + controller.getSelectionManager().getActiveProfile(), + null, "property_0", + "", ""); + + int numGraphSpaces = annotationManager.getGraphSpaceCollection().getCollection().size(); + int numVertices = + annotationManager + .getGraphSpaceCollection() + .getCollection() + .stream() + .mapToInt( + graphSpace1 -> graphSpace1.getChildVertices(graphSpace.getDefaultParent()).length) + .sum(); + int numTriples = + annotationManager + .getGraphSpaceCollection() + .getCollection() + .stream() + .mapToInt( + graphSpace1 -> graphSpace1.getChildEdges(graphSpace.getDefaultParent()).length) + .sum(); + + assert numGraphSpaces == 2 : "There were " + numGraphSpaces + " graph spaces"; + assert numVertices == 4 : "There were " + numVertices + " vertices"; + assert numTriples == 2 : "There were " + numTriples + " triples"; + } + + @Test + public void successfulSave() { + controller = new KnowtatorController(); + + int projectID = 0; + + String projectFileName = projectFileNames[projectID]; + File resourceProjectFile = getProjectFile(projectFileName); + + File projectDirectory = Files.createTempDir(); + + try { + FileUtils.copyDirectory(resourceProjectFile.getParentFile(), projectDirectory); + } catch (IOException e) { + e.printStackTrace(); + } + File projectFile = new File(projectDirectory, resourceProjectFile.getName()); + controller.getProjectManager().loadProject(projectFile); + controller.getProjectManager().saveProject(); + successfulLoad(); + + projectDirectory.deleteOnExit(); + } + + @Test + public void successfulExportToBrat() { + controller = new KnowtatorController(); + + int projectID = 0; + int articleID = 4; + String projectFileName = projectFileNames[projectID]; + File projectFile = getProjectFile(projectFileName); + String article = articleFileNames[articleID]; + + File bratAnnotationFile = getBratFile(projectFileName, article); + + File outputFile = new File("E:/Documents/Test/brat_test.ann"); + + controller.getProjectManager().loadProject(projectFile); + controller.getProjectManager().loadFromFormat(BratStandoffUtil.class, bratAnnotationFile); + controller + .getProjectManager() + .saveToFormat( + BratStandoffUtil.class, + controller + .getTextSourceManager() + .getTextSourceCollection() + .getCollection() + .stream() + .filter(textSource1 -> textSource1.getId().equals(article)) + .findAny() + .get(), + outputFile); + } + + @Test + public void successfulLoadOldCoreference() { + controller = new KnowtatorController(); + + int projectID = 2; + int articleID = 5; + String projectFileName = projectFileNames[projectID]; + File projectFile = getProjectFile(projectFileName); + + controller.getProjectManager().loadProject(projectFile); + + TextSource textSource = + controller + .getTextSourceManager() + .getTextSourceCollection() + .getCollection() + .stream() + .filter(textSource1 -> textSource1.getId().equals(articleFileNames[articleID])) + .findAny() + .get(); + + AnnotationManager annotationManager = textSource.getAnnotationManager(); + int numAnnotations = annotationManager.getAnnotations().getCollection().size(); + int numSpans = annotationManager.getSpans(null, 0, textSource.getContent().length()).size(); + int numGraphSpaces = annotationManager.getGraphSpaceCollection().getCollection().size(); + int numVertices = + annotationManager + .getGraphSpaceCollection() + .getCollection() + .stream() + .mapToInt( + graphSpace -> graphSpace.getChildVertices(graphSpace.getDefaultParent()).length) + .sum(); + int numTriples = + annotationManager + .getGraphSpaceCollection() + .getCollection() + .stream() + .mapToInt(graphSpace -> graphSpace.getChildEdges(graphSpace.getDefaultParent()).length) + .sum(); + + assert numGraphSpaces == 1 : "There were " + numGraphSpaces + " graph spaces"; + assert numVertices == 12 : "There were " + numVertices + " vertices"; + assert numTriples == 11 : "There were " + numTriples + " triples"; + assert numAnnotations == 12 : "There were " + numAnnotations + " annotations"; + assert numSpans == 12 : "There were " + numSpans + " spans"; + } +} diff --git a/src/test/java/edu/ucdenver/ccp/knowtator/KnowtatorIAATest.java b/src/test/java/edu/ucdenver/ccp/knowtator/KnowtatorIAATest.java index 290634f5..43285d50 100644 --- a/src/test/java/edu/ucdenver/ccp/knowtator/KnowtatorIAATest.java +++ b/src/test/java/edu/ucdenver/ccp/knowtator/KnowtatorIAATest.java @@ -1,42 +1,42 @@ -package edu.ucdenver.ccp.knowtator; - -import org.junit.Before; -import org.junit.Test; - -public class KnowtatorIAATest { - - @Before - public void setUp() { -// manager.getProjectManager().read(new File("test_project/CHEBI batch 1 IAA/Kristin/11319941.txt.knowtator.knowtator")); -// manager.getProjectManager().read(new File("test_project/CHEBI batch 1 IAA/Kristin+Mike/11319941.txt.knowtator.knowtator")); -// -// manager.getProjectManager().read(new File("test_project/CHEBI batch 1 IAA/Kristin/11532192.txt.knowtator.knowtator")); -// manager.getProjectManager().read(new File("test_project/CHEBI batch 1 IAA/Kristin+Mike/11532192.txt.knowtator.knowtator")); -// -// manager.getProjectManager().read(new File("test_project/CHEBI batch 1 IAA/Kristin/11597317.txt.knowtator.knowtator")); -// manager.getProjectManager().read(new File("test_project/CHEBI batch 1 IAA/Kristin+Mike/11597317.txt.knowtator.knowtator")); -// -// manager.getProjectManager().read(new File("test_project/CHEBI batch 1 IAA/Kristin/11604102.txt.knowtator.knowtator")); -// manager.getProjectManager().read(new File("test_project/CHEBI batch 1 IAA/Kristin+Mike/11604102.txt.knowtator.knowtator")); - -// try { -// KnowtatorIAA knowtatorIAA = new KnowtatorIAA(manager.getConfigProperties().getProjectLocation(), manager); -// knowtatorIAA.runClassIAA(); -// knowtatorIAA.closeHTML(); -// } catch (IAAException e) { -// e.printStackTrace(); -// } - } - - @Test - public void runClassIAA() { - } - - @Test - public void runSpanIAA() { - } - - @Test - public void runClassAndSpanIAA() { - } -} +package edu.ucdenver.ccp.knowtator; + +import org.junit.Before; +import org.junit.Test; + +public class KnowtatorIAATest { + + @Before + public void setUp() { +// manager.getProjectManager().read(new File("test_project/CHEBI batch 1 IAA/Kristin/11319941.txt.knowtator.knowtator")); +// manager.getProjectManager().read(new File("test_project/CHEBI batch 1 IAA/Kristin+Mike/11319941.txt.knowtator.knowtator")); +// +// manager.getProjectManager().read(new File("test_project/CHEBI batch 1 IAA/Kristin/11532192.txt.knowtator.knowtator")); +// manager.getProjectManager().read(new File("test_project/CHEBI batch 1 IAA/Kristin+Mike/11532192.txt.knowtator.knowtator")); +// +// manager.getProjectManager().read(new File("test_project/CHEBI batch 1 IAA/Kristin/11597317.txt.knowtator.knowtator")); +// manager.getProjectManager().read(new File("test_project/CHEBI batch 1 IAA/Kristin+Mike/11597317.txt.knowtator.knowtator")); +// +// manager.getProjectManager().read(new File("test_project/CHEBI batch 1 IAA/Kristin/11604102.txt.knowtator.knowtator")); +// manager.getProjectManager().read(new File("test_project/CHEBI batch 1 IAA/Kristin+Mike/11604102.txt.knowtator.knowtator")); + +// try { +// KnowtatorIAA knowtatorIAA = new KnowtatorIAA(manager.getConfigProperties().getProjectLocation(), manager); +// knowtatorIAA.runClassIAA(); +// knowtatorIAA.closeHTML(); +// } catch (IAAException e) { +// e.printStackTrace(); +// } + } + + @Test + public void runClassIAA() { + } + + @Test + public void runSpanIAA() { + } + + @Test + public void runClassAndSpanIAA() { + } +} diff --git a/src/test/resources/test_load_old_coreference/Annotations/small_11319941.txt.knowtator.xml b/src/test/resources/test_load_old_coreference/Annotations/small_11319941.txt.knowtator.xml index 6abe81cf..958d68dd 100644 --- a/src/test/resources/test_load_old_coreference/Annotations/small_11319941.txt.knowtator.xml +++ b/src/test/resources/test_load_old_coreference/Annotations/small_11319941.txt.knowtator.xml @@ -1,136 +1,136 @@ - - - - - - gold - - the mouse striatum - - - Noun Phrase - - - - - gold - - the mouse striatum - - - Noun Phrase - - - - - gold - - it - - - Noun Phrase - - - - - gold - - the mouse striatum - - - Noun Phrase - - - - - gold - - the mouse striatum - - - IDENTITY chain - - - - - - - - - - - - - - - - - - - - gold - - it - - - Noun Phrase - - - - - gold - - mouse striatum - - - Noun Phrase - - - - - gold - - the mouse striatum - - - Noun Phrase - - - - - gold - - the striatum - - - Noun Phrase - - - - - gold - - the striatum - - - - gold - - the striatum - - - - gold - - its - - - Noun Phrase - - - Noun Phrase - - - Noun Phrase - + + + + + + gold + + the mouse striatum + + + Noun Phrase + + + + + gold + + the mouse striatum + + + Noun Phrase + + + + + gold + + it + + + Noun Phrase + + + + + gold + + the mouse striatum + + + Noun Phrase + + + + + gold + + the mouse striatum + + + IDENTITY chain + + + + + + + + + + + + + + + + + + + + gold + + it + + + Noun Phrase + + + + + gold + + mouse striatum + + + Noun Phrase + + + + + gold + + the mouse striatum + + + Noun Phrase + + + + + gold + + the striatum + + + Noun Phrase + + + + + gold + + the striatum + + + + gold + + the striatum + + + + gold + + its + + + Noun Phrase + + + Noun Phrase + + + Noun Phrase + \ No newline at end of file diff --git a/src/test/resources/test_load_old_coreference/Articles/11319941.txt b/src/test/resources/test_load_old_coreference/Articles/11319941.txt index 2552ae2d..5250db93 100644 --- a/src/test/resources/test_load_old_coreference/Articles/11319941.txt +++ b/src/test/resources/test_load_old_coreference/Articles/11319941.txt @@ -1,169 +1,169 @@ -Complex trait analysis of the mouse striatum: independent QTLs modulate volume and neuron number - -Abstract - -Background - -The striatum plays a pivotal role in modulating motor activity and higher cognitive function. We analyzed variation in striatal volume and neuron number in mice and initiated a complex trait analysis to discover polymorphic genes that modulate the structure of the basal ganglia. - -Results - -Brain weight, brain and striatal volume, neuron-packing density and number were estimated bilaterally using unbiased stereological procedures in five inbred strains (A/J, C57BL/6J, DBA/2J, BALB/cJ, and BXD5) and an F2 intercross between A/J and BXD5. Striatal volume ranged from 20 to 37 mm3. Neuron-packing density ranged from approximately 50,000 to 100,000 neurons/mm3, and the striatal neuron population ranged from 1.4 to 2.5 million. Inbred animals with larger brains had larger striata but lower neuron-packing density resulting in a narrow range of average neuron populations. In contrast, there was a strong positive correlation between volume and neuron number among intercross progeny. We mapped two quantitative trait loci (QTLs) with selective effects on striatal architecture. Bsc10a maps to the central region of Chr 10 (LRS of 17.5 near D10Mit186) and has intense effects on striatal volume and moderate effects on brain volume. Stnn19a maps to distal Chr 19 (LRS of 15 at D19Mit123) and is associated with differences of up to 400,000 neurons among animals. - -Conclusion - -We have discovered remarkable numerical and volumetric variation in the mouse striatum, and we have been able to map two QTLs that modulate independent anatomic parameters. - -Background - -The dorsal striatum is a massive nucleus in the basal forebrain that plays a pivotal role in modulating motor activity and higher cognitive function. Approximately 90% of all neurons in the striatum - 1.5 to 2.5 million in mice [1,2] and 110-200 million in humans [3,4] - belong to an unusual type 'of inhibitory projection cell referred to as medium spiny neurons [5-8]. Striatal neurons are divided into two major subpopulations (patch and matrix), that have somewhat different gene expression profiles and have different patterns of pre- and postsynaptic connections [9-13]. - -Numbers of medium spiny neurons and ratios of these and less numerous striatal interneurons are critical variables that influence motor performance and aspects of cognition. In the case of Huntington disease the loss of 15-30% of the normal complement of medium spiny neurons leads to distinct movement disorder in both humans and transgenic mouse models [14-17]. The subset of genes that normally control the proliferation, differentiation, and survival of striatal neurons [18-20] are therefore of considerable importance in ensuring adaptive behavior at maturity. - -In this study we use a forward genetic approach [21, 22] to begin to map and characterize members of the subset of normally polymorphic genes that specifically modulate the production and survival of striatal neurons. Our analysis of the neurogenetic control of striatal cell populations relies on the combination of two complementary quantitative approaches. The first of these, complex trait analysis, is a comparatively new genetic method that makes it possible to map individual loci that underlie polygenic traits [22,23]. The second consists of a set of unbiased stereological procedures that can be used to obtain cell counts accurately and efficiently from large numbers of cases [24,25]. - -From a technical point of view the mouse striatum has several advantages that make it an excellent target for complex trait analysis of the mammalian CNS. First, it is a large, cytoarchitectonically distinct region comprising approximately 5-6% of the volume of the mouse brain. Second, the dorsal striatum has a comparatively homogenous cellular composition, potentially reducing the number of quantitative trait loci (QTLs) that affect striatal neuron number. Finally, recent experiments on the molecular control of telencephalic development have highlighted a number of genes that influence neuron proliferation and differentiation of the striatum and other neighboring forebrain structures [18][26-30]. - -We report here both neuroanatomic and genetic quantitative evidence that the size of the striatum and the number of neurons contained within it are modulated independently. - -Results - -The results are divided in two sections. The first is a biometric analysis of variation of size and neuronal populations in mouse striatum. The second section is a quantitative genetic dissection and QTL analysis of variation in the size and neuronal population of the mouse striatum. - -Phenotypes - -Strain differences - -Brain Weight and Striatal Volume. Five strains were chosen to represent low, mid, and high brain weights (Fig 1A). Brain weights of the two high strains, BXD5 (540 ± 9 mg SEM) and BALB/cJ (527 ± 13 mg), are significantly greater (P < .001) than that of C57BL/6J (476 ± 5 mg). Similarly, the brain weights of A/J (395 ± 5 mg) and DBA/2J (403 ± 5 mg) are significantly lower than those of the other three strains (P < .001). As anticipated, differences in striatal volume correspond well with differences in brain weight and volume. The striata of BXD5 (31.0 ± 0.9 mm3) and BALB/cJ (32.5 ± 1.6 mm3) mice are significantly larger (P < .001) than those of C57BL/6J (23.6 ± 0.6 mm3), A/J (21.7 ± 1.0 mm3), and DBA/2J (22.8 ± 0.6 mm3) strains. - -Figure 1 - -Histograms of histologic phenotypes for inbred strains of mice.  A. Brain weight differences are apparent between the three categories (F4,28 = 82.1, P < .001). Asterisk indicates significant differences on post-hoc tests (P < .005). B. Striatal volume. There are significant differences in striatal volume between the low brain weight strains (A/J, DBA.2J) and the high brain weight strains (BALB/cJ, BXD5). C57BL6/J mice differ from the high, but not low brain weight strains (F4,28 = 28.9, P < .001). Asterisk indicates significant differences on post-hoc tests (P < .005). C. Neuron-packing density in the striatum. In general, brains with smaller striata have greater neuron-packing density (F4,28 = 17.6, P < .001). Asterisks indicate significant differences on post-hoc tests (P < .005). D. Neuron number in the striatum. There are no significant difference in striatal neuronal number among the five inbred strains (F4,28 = 2.0. ns). - -Striatal Neuron-Packing Density. There is a significant difference among strains in the packing density of striatal neurons (P < .001 for all comparisons). A/J has a higher mean density (84,800 ± 3,500 neurons/mm3) than all strains other than DBA/2J (80,400 ± 2,700 neurons/mm3). BALB/cJ (57,700 ± 2,500 neurons/mm3) and BXD5 (62,700 ± 2,600 neurons/mm3) do not differ significantly from each other, but do differ from all other strains. C57BL/6J (73,100 ± 1,700) differs from all other mice with the exception of DBA/2J. Inbred strains with smaller striatal volumes have higher neuronal packing densities (Fig 1C). - -Striatal Neuron Number. As a result of the reciprocal relation between volume and density, there is no significant difference in striatal neuron number among the five strains. Total striatal neuron numbers ranges over a very modest range - from a low of 1.72 ± .015 million in C57BL/6J to a high of 1.93 ± .035 million in BXD5. - -Correlational Statistics - -Our comparisons are based on five strains, and one consequence of this modest sample size is that sampling errors and intraclass correlations may bias the results [31]. We therefore also analyzed a larger sample of genetically heterogeneous ABF2 intercross animals (an F2 intercross between A/J and BXD5). We first determined that the distribution of all four dependent measures were normally distributed (Fig 2), before subjecting the data to correlational analysis. In this set of animals brain weight correlates significantly with striatal volume (r = .82, df = 42, P < .001, Fig 3A). Striatal volume is negatively correlated with neuron-packing density overall (r = -0.32, df = 42, P < .05), again indicating that the greater the striatal volume, the lower the neuron-packing density (Fig 3B). Despite this relationship, the total population of striatal neurons correlates positively with striatal volume in this larger sample (r = .60, df = 42, P < .001; Fig 3C). In this crucial respect, results from the genetically heterogeneous F2 animals differ from those of inbred strains. - -Figure 2 - -Histograms of distribution of dependent measures in ABDF2 subjects. Brain weight (A: Χ2 = 2.91, df = 2, ns), striatal volume (B: Χ2 = 1.13, df = 2, ns), striatal neuron-packing density C: Χ2 = 1.64, df = 2, ns), and striatal neuron number (D: Χ2 = 0.73, df = 2, ns) are all normally distributed (Kolmogorov-Smirnov Normality Test). - -Figure 3 - -Scatterplots of subjects from an F2 intercross between a BXD5 and A/J inbred strains (ABF2, N = 44) illustrating correlations of striatal volume with brains weight (A), striatal neuron-packing density (B), and striatal neuron number (C). There are significant positive correlations between striatal volume and both brain weight and neuron number. Striatal volume negatively correlates with neuron-packing density in these subjects. ***P < .001; *P < .05. - -QTL Analysis - -The analysis in this section is focused principally on two traits: striatal volume (absolute and residual values), and striatal neuron number (also absolute and residual values). Residuals for these traits were computed for both traits to minimize the influence of brain weight. Two additional traits were mapped to assess specificity of the effects of putative QTL-bearing intervals, namely brain weight and non-striatal brain weight (Table 1). This last parameter was estimated by subtracting the estimated bilateral striatal weight (assuming a specific gravity of 1.0) from that of the whole brain. - -Table 1 - -Linkage Statistics for Striatal Volume and Neuron Number - -** Alleles inherited from BXD5 that increase a value are defined as positive additive effects. † LRS values can be converted to LOD scores by dividing by 4.6. Previously described QTL for brain weight [56]. Column headings:Trait, the phenotype used in linkage analysis; Marker, the symbol of the microsatellite loci used to genotype mice; Chr, the chromosome on which the marker is located; LRS is the likelihood ratio statistic (4.6 x the LOD score); %Var is the percentage of the total phenotypic variance apparently accounted for by differences in genotype in the an interval defined by the marker; P, the point-wise probability that the linkage is a false positive. Add and Dom are estimates of the additive and dominance effects of genetic variation. Units are the same as those of the traits (volume in mm3 or numbers of cells). The two bold loci marked with asterisks achieve genome-wide significance in this sample population. - -The strongest linkage was found between variation in striatal volume and an interval on chromosome 10 between the markers D10Mit194 at 29 cM and D10Mit209 at 49 cM. The likelihood ratio statistic - a value that can be read as a chi-square - peaks in this 20 cM interval at 17.5 and is associated with a P value of 0.00016 (Table 1), equivalent to a LOD score of 3.8 (Fig 4A). The genome-wide probability of achieving a linkage of this strength by chance is <0.05. This locus accounts for as much as a third of the total phenotypic variance in striatal volume and as much as 50% of the genotypic variance (h2 = 0.39). Alleles in this Chr 10 interval that are inherited from the BXD5 parental strain contribute to a significantly larger striatum than do alleles inherited from A/J. Mean bilateral volume corrected for shrinkage for the AA genotype at D10Mit186 (n = 11) is 25.3 ± 1.3 mm3 whereas that for AB and BB genotypes are 29.1 ± 0.7 mm3 and 30.0 ± 0.5 mm3 (n = 14 and 11), respectively. The insignificant difference between BB and AB genotypes suggests that the B allele is dominant. BXD5 is a recombinant inbred strain initially generated by crossing strains C57BL/6J and DBA/2J. Most of the proximal part of Chr 10 in BXD5 is derived from DBA/2J, but a short interval between 40 and 50 cM is derived exclusively from C57BL/6J. This C57BL/6J region corresponds to the peak LRS score. We estimate a single B allele inherited from the BXD5 parent increases striatal volume by approximately 2.0-2.5 mm3. - -Figure 4 - -Plots of LOD scores and LRS for each of the two traits. A. Plot for Striatal volume on Chr. 10. Peak values for the LRS are around 30 cM. B. Plot for striatal neuron number on Chr. 19. Peak values for the LRS are around 50 cM. - -The Chr 10 interval has an appreciable effect on brain size. Variance in brain weight minus that of the striatum is associated with an LRS of 14.2 in the same location between D10Mit106 and D10Mit186. Each B allele adds 20-30 mg to total brain weight. The Chr 10 locus clearly has pleiotropic effects on the CNS, but its effect on the striatum is more intense. Nonetheless, until we know more about the scope of effects, we have opted to give this Chr 10 locus a generic name, Brain size control 10a (Bsc10a). The specific striatal component of the Bsc10a was analyzed by mapping the residual striatal values that corrects for differences in brain volume. The specific effect of a B allele is reduced from 2.5 mm3 to 0.5-1.0 mm3, and the LRS is reduced to 6.9, a value which still has a point-wise probability of only 0.03, indicating a significant independent effect. - -We identified a second strong candidate interval on distal Chr 19 that may modulate striatal neuron number. The LRS peaks at 15.0 (a LOD of 3.26) at one of our more distal markers (D19Mit123, 51 cM, p = .00055). In mapping neuron number we actually used the residual cell population as a trait, and we are therefore confident that this interval has a selective, although not necessarily exclusive, effect on numbers of neurons in striatum (Fig 4B). Each B allele increases the population by approximately 200,000 cells. The AA genotype has an average residual population that is 116,000 less than the mean (i.e., a residual of -116,000; n = 12), the AB heterozygotes have an average of -8,000 neurons (n = 18), and the BB homozygotes have an average of 290,000 neurons (n = 6). Corresponding absolute numbers of striatal neurons for the three genotypes are 1.8, 1.9, and 2.2 million. The two-tailed genome-wide probability of this locus is at the threshold for declaring a QTL (p = 0.035 ± 0.01 two-tailed for an additive model and 0.08 ± 0.2 for a free model). No other chromosomal interval has an LRS score remotely as high as distal Chr 19. The next highest LRS value is only 7.2 on Chr 1 near D1Mit65 and has a point-wise probability that is 50 times higher than the Chr 19 interval. Given these findings we have given the distal chromosome 19 interval the name Striatal Neuron Number 19a (Stnn19a). Allelic differences in this interval account for up to 30% of the total variance in striatal neuron number. As the heritability of this trait is 0.64, this trait can be said to account for over 80% of the genetic variance. Residual neuron counts have a higher LRS than the total neuron counts (LRS of 15.0 vs. 11.9). This indicates that the Chr 19 interval is likely to have selective effect on the striatum. Consistent with this hypothesis, the LRS for brain weight on distal Chr 19 is under 1.0, and weights of all three genotypes average 480 ± 5 mg. Linkage on Chr 19 is not affected at all by remapping with control for the striatal volume locus on Chr 10. Thus, Chr 10 and Chr 19 intervals do not interact or cooperate in controlling striatal volume or neuron number. - -Discussion - -Striatal volume correlates strongly to brain weight. Nonetheless, a significant fraction of the variation in both striatal volume and neuron number among inbred strains of mice can not be predicted on the basis of brain weight or volume. This non-predictable variation is of particular interest to us because it is generated in large part by genes that have more intense or even selective effects on the dorsal striatum than other brain regions. We have succeeded in mapping one QTL with somewhat more intense effects on the volume of the striatum than the rest of the brain to the proximal half of chromosome 10. We have also mapped a QTL with selective effects on number of neurons in the striatum to the distal end of chromosome 19. - -Between-strain variability - -Variation in the size of CNS regions and cell populations is already known to be substantial in the striatum and in many other regions of the CNS. The number of striatal cholinergic neurons, for example, varies 50% among 26 BXD RI lines [32]. Interestingly, this variation appears to be unrelated to susceptibility to haloperidol-induced catalepsy. The volume of the granule cell layer of the dentate gyrus varies as much as 40-80% among different inbred strains of mice [33-35]. More recent experiments using stereologic techniques have reported substantial variation in both neuron number and volume of the pyramidal and dentate cell layers of the hippocampus [36]. Granule cell numbers in NZB/BINJ and DBA/2 were 37-118% greater than C57BL/6J mice, and differences in volume were even larger (up to 150% larger in the DBA/2 as compared to the C57BL/6J mice). There is also substantial among-strain variation in other structures in the nervous system including the nucleus of the solitary tract [37], the spinal nucleus of the bulbocavernosus [38], and retinal ganglion cells [39, 40]. Taken together, these results point to a high level of variability in neuron number in the CNS of mice. - -Based on these findings, we anticipated significant differences in the striatum of inbred strains. We did find large strain differences in volume. What was surprising was that in our set of five highly divergent strains the differences in volume were not matched by significant differences in neuron number. There was in fact a strong inverse relationship between striatal volume and neuron-packing density that led to a remarkably stabile neuron number. The variation in neuron-packing density with volume contrasts somewhat with the report of Abusaad and colleagues [36], who found no significant differences (P = .06) in neuronal packing density in the dentate gyrus cell layers of the hippocampus among the three mouse strains that they examined, but did see a significant difference in the pyramidal cell layers. A recent report demonstrates a 25% range of granule cell packing density among 35 BXD recombinant inbred lines [41], a finding supporting the notion that packing density varies significantly among mouse strains. - -These data suggest that principles that govern the relationship between neuronal volume and neuron-packing density may differ between the striatum and the other CNS regions. The striatum may be a special case - a region in which numbers of medium spiny neurons is more tightly regulated than neuron populations in some other regions. It could also be that measuring specific neuronal subtypes would demonstrate a greater amount of variance than we currently report [32]. Given the relatively small number of strains that we have sampled, our hypothesis of lower variation in striatal cell populations requires a more extensive test, a problem which we are now pursuing using the large numbers of strains in the Mouse Brain Library . - -Verification of QTL Results - -We have quantified the population of striatal neurons on both sides of the brain in 77 cases total. This is a large sample from the perspective of stereological analysis of the mouse CNS, but from the perspective of gene mapping and quantitative genetics this is, of course, a modest-sized sample size and one that will need to be treated as a starting point for more refined genetic analysis. Nonetheless, we have succeeded in mapping one locus, Bsc10a, which modulates striatal volume with a genome-wide significance of P < 0.05. We have also discovered linkage on Chr 19 to variation in the total number of striatal neurons. These mapping data are concordant with our strain comparison and collectively suggest that there is apparently no significant genetic correlation between striatal volume and neuron number. To confirm and refine our genetic dissection of the striatum we plan to analyze the AXB and BXA recombinant inbred (RI) strains generated by crossing A/J with C57BL/6J. This large RI set has already been processed and regenotyped and is now part of the Mouse Brain Library (see and ). An analysis of RI strains can be quickly extended by generating F1 intercrosses between A/J and the subset of RI strains that have recombinations in the QTL intervals on Chrs 10 and 19. Isogenic sets of RI-backcross progeny can be used to test specific models of gene action, for example, the dominance of the B allele at Bsc10a. - -A major goal of QTL mapping is to define loci that affect critical phenotypes with sufficient precision to generate short lists of candidate genes. Generating lists of candidates for QTLs will soon be greatly facilitated by more complete and better annotated mouse and human sequence databases combined with information on gene expression profiles of whole brain and striatum [42]. Once chromosomal positions of the QTLs have been determined to a precision of 1-3 cM, reducing the probability that a QTL actually represents a cluster of linked genes, it will become appropriate to assess strengths of candidates using transgenic animals and by sequence comparisons [43]. - -Interval mapping places the QTL for Bsc10a in the central portion of Chr 10 in proximity with a number of genes known to affect brain development. One of these is Grk2, a member of the family of ionotropic glutamate receptor genes that is thought to play a role in modulating Huntington disease [44]. In the mouse, members of this receptor type act to indirectly down-regulate synaptic activity in the striatum [45]. Another gene that falls into the Bsc10a interval is Macs, the gene encoding the myristoylated alanine-rich C kinase substrate (MARCKS protein). This molecule is important in cerebral development. MARCKS-deficient mice have a high incidence of exencephaly, agenesis of the corpus callosum, and abnormalities other forebrain structure including widespread neocortical ectopias [46, 47]. The MARCKS-related protein gene is expressed in the striatum during early brain development in the rat [48]. - -The location of the QTL modulating striatal neuron number to the distal part of chromosome 19 places it in proximity to a number of genes that have been recently been shown to be important factors in telencephalic development, particularly Vax1. Vax1 is a homeobox-containing gene and is a close relative of the Emx and Not genes. Vax1 is localized during development to the anterior ventral forebrain, and is expressed in the striatum during embryogenesis [28]. This molecule also has an important role in axon guidance: both the anterior portion of the corpus callosum and the optic chiasm are malformed or absent in Vax1 knockout mice [49]. In addition, Vax1 interacts with several molecules including sonic hedgehog,Pax2, Pax6, and Rx that are known to be important during development of the basal forebrain [27, 50]. - -Brain volume and neuron number - -It has previously been shown that differences in brain weight are proportional to total brain DNA content and consequently to total CNS cell number [51, 52]. For this reason, brain weight has been suggested to be a good surrogate measure for total cell number in mice, as in humans [53]. Moreover, previous work has demonstrated a tight link between regional brain volume and neuron number [54, 55], which implies that volumetric measures reliably estimate neuron number. With this literature in mind, we expected that our measures of striatal volume would predict neuron number in this nucleus. With the inbred strains, however, we found that strains with small striata (A/J) had virtually the same number of neurons as those with large striata (BALB/cJ). This result indicates that at least for the striatum, volume is not a reliable indicator of neuron number, and that they may be two independent traits. This conclusion is bolstered at the genetic level by our report of two distinct QTLs for these two morphologic phenotypes. Taken together with previous reports [51-53], we speculate that while total neuron number in the cerebrum may relate to total brain weight, the relationship of these two variables is flexible at the regional level. - -Materials and Methods - -Subjects - -Thirty-four of the 78 mice that we analyzed were common inbred strains that were selected to sample a wide range of brain weights, and by expectation, striatal volumes. Low brain weight strains included A/J (n = 5) and DBA/2J (n = 8). Mid and high brain weight strains include C57BL/6J (n = 10), BALB/cJ (n = 5), and BXD5 (n = 6, formally this recombinant inbred strain is known as BXD-5/Ty). One of the ten C57BL/6J subjects was removed from the analysis because values for striatal neuron number were anomalous with Z scores more than 2.5. - -To map QTLs that modulate variation in CNS size and cell populations we used an F2 intercross between a strain with low brain weight (A/J) and a strain with high brain weight (BXD5). A total of 518 of these ABDF2 progeny were generated, but for this study we selected a subset of 44 cases, of which 36 were fully genotyped (see below). The sample included 20 animals in the lowest and highest quartiles, and 24 cases within 0.5 SD of the mean brain weight. We therefore measured subjects representing the full range of brain weights (see Fig 2A). The ABDF2 intercross has been used previously to map QTLs that modulate total brain weight [56] and cerebellar volume [57]. The BXD5 strain used as the paternal strain in this intercross is a recombinant inbred strain that was derived by crossing C57BL/6J and DBA/2J lines of mice [58]. As a result, ABDF2 progeny are a mixture of three genomes (50% A/J, 25% C57BL/6J, and 25% DBA/2J). However, at any given locus there will be only two alleles, A and B, or A and D. All stocks of mice were obtained from the Jackson Laboratory . ABF2 mice were generated at the University of Tennessee by Dr. Richelle Strom [56] using Jackson Laboratory foundation stock. The F2 mice ranged in age from 35 to 143 days. The standard inbred strains ranged in age from 51 to 365 days. We studied approximately equal numbers of males and females. - -Histological Preparation - -All brains analyzed in this study are part of the Mouse Brain Library (MBL). The MBL is both a physical and Internet resource. High-resolution digital images of sections from all cases are available at . - -Mice were anesthetized deeply with Avertin (1.25% 2,2,2-tribromoethanol and 0.8% tert-pentyl alcohol in water, 0.5-1.0 ml ip) and perfused through the left ventricle with 0.9% sodium phosphate buffered (PB) saline (pH 7.4) followed by 1.25% glutaraldehyde/1.0% paraformaldehyde in 0.1 M PB (pH 7.40) over a period of 2 to 4 min. An additional 10-ml of double-strength fixative (2.5% glutaraldehyde/2.0% paraformaldehyde) was injected for 1 to 2 min at an increased flow rate. The head with brain was placed a vial with the last fixative and stored at 4°C until dissection. - -Following dissection, the brains were weighed immediately. Brains were subsequently shipped to Beth Israel Deaconess Medical Center. They were immersed in fresh 10% formalin for at least one week before being embedding in celloidin [59]. Brains were cut on a sliding microtome at 30 μm in either horizontal or coronal planes. Free-floating sections were stained with cresylechtviolett and four series of every tenth section were mounted on slides and coverslipped (see for further details). - -Histologic Phenotypes - -Total Brain Volume - -To accurately estimate histological shrinkage for each brain in the sample, we determined the volume of the entire brain and took a ratio of this value to the original fixed brain weight. Brain volumes were determined from serial sections using point counting and Cavalieri's rule. High-resolution (4.5 μm/pixel) images of entire sections were taken from the Mouse Brain Library, and point counting was performed on these images using NIH Image 1.55 and an Apple Macintosh computer . If the criteria for using the Cavalieri's estimator were not met (due to missing or damaged sections), a measurement method involving piecewise parabolic integration was employed [60]. Subsequent measurements of striatal volume and neuron packing density were corrected for volumetric shrinkage. The average shrinkage was 62.2 ± 0.4% (a mean residual volume of 37.8%). - -Striatal Volume - -Volume of the striatum was also determined from serial section analysis using point counting and Cavalieri's rule. Images from the sections were captured at 12.5 x and were projected onto a video monitor. Point counting was performed as above. Volume was computed separately for the right and left sides and corrected for shrinkage. - -Striatal Neuron-Packing Density and Neuron Number - -Neurons were counted using the 3-dimensional counting software of Williams and Rakic [24]. A series of six contiguous counting boxes (each 40 x 65 x 20 μm) aligned in a 3 x 2 matrix were placed randomly within the striatum, and those neurons the nucleoli of which were in focus were counted as described previously [61, 62]. This large functional counting box (80 x 195 x 20 μm) was chosen to minimize sampling variance by ensuring an equitable sampling of striatal patch and matrix. Two of these large fields were counted in each of the hemispheres. Neuron-packing density was computed as the number of cells/mm3 corrected for shrinkage. Multiplying the volume of the striatum by its cell-packing density permitted estimation of the number of neurons in that nucleus. - -Reliability - -We determined test-retest reliability by having an observer blindly re-measure striatal volume on a subset of 10 brains from the collection. The observer not only re-measured the striatal volume from the same series of sections as the original measure, but also estimated volume from a second series of 1 in 10 sections offset by 5 sections from the previous series. The correlations among the three estimations ranged from .95 to .99 (P < .05), indicating a high degree of reliability for this dependent variable. - -We assessed reliability of our estimates of neuronal numbers by having an observer blindly re-estimate neuron number in the same 10 brains above. The intra-observer correlation for this measure was .81 (P < .05), which is similar to the reliability seen in previous estimates of neuron number [39, 40]. - -Genotyping and QTL Mapping - -Genomic DNA was extracted from spleens of F2 animals using a high-salt procedure [63]. A set of 82 microsatellite loci distributed across all autosomes and the X chromosome were typed in a set of ABDF2 animals using a standard PCR protocol [64, 65] as detailed in Zhou and Williams [66]. F2 genotypes were entered into a spreadsheet program and transferred to Map Manager QTb28 for mapping and permutation analysis [67]. Map Manager implements both simple and composite interval mapping methods described by Haley and Knott [68]. Two-tailed genome-wide significance levels were estimated by comparing the highest likelihood ratio statistic (LRS) of correctly ordered data sets with LRSs computed for 10,000 permutations of those same data sets [69]. LRS scores can be converted to LOD scores by dividing by 4.6. The 2-LOD support interval of linkage was estimated directly from interval maps. The approximate 95% support interval was estimated by application of equations in Darvasi and Soller [70]. With a modest sample size such as we have been able to examine using unbiased stereological methods, even a QTL responsible for 30 to 50% of the variance. is associated with a 95% interval of 20 to 30 cM. - -Regression Analysis of Trait Values - -The unadjusted striatal estimates vary to a large extent as a result of variation in total brain weight. However, one of our goals in this study is to map QTLs with relatively intense effects on the striatum. For this reason we also have corrected all of the parameters used in the mapping analysis for variation in brain weight using linear regression analysis. We have mapped data with and without compensation for variance in brain weight. The corrected values are referred to as residuals. - -Analysis - -All data were analyzed using regression, correlation, and ANOVA statistical tests (see StrAnatData.xls for original data used to perform this analysis). A Bonferroni/Dunn correction was used for post hoc examination of significant main effects in the ANOVA. This post-hoc test is functionally identical to a Fisher PLSD, but the alpha level is more conservative (.005). - -Supplementary Material - -StrAnatData.xls - -This file contains anatomic data for each of the subjects used in the current experiment. - -Click here to download StrAnatData.xls - -StrMap.qtx - -This file contains the genotyping data from the 82 markers used in the current experiment, in MapManager QTX format. - -Click here to download StrMap.qtx - -Acknowledgements - +Complex trait analysis of the mouse striatum: independent QTLs modulate volume and neuron number + +Abstract + +Background + +The striatum plays a pivotal role in modulating motor activity and higher cognitive function. We analyzed variation in striatal volume and neuron number in mice and initiated a complex trait analysis to discover polymorphic genes that modulate the structure of the basal ganglia. + +Results + +Brain weight, brain and striatal volume, neuron-packing density and number were estimated bilaterally using unbiased stereological procedures in five inbred strains (A/J, C57BL/6J, DBA/2J, BALB/cJ, and BXD5) and an F2 intercross between A/J and BXD5. Striatal volume ranged from 20 to 37 mm3. Neuron-packing density ranged from approximately 50,000 to 100,000 neurons/mm3, and the striatal neuron population ranged from 1.4 to 2.5 million. Inbred animals with larger brains had larger striata but lower neuron-packing density resulting in a narrow range of average neuron populations. In contrast, there was a strong positive correlation between volume and neuron number among intercross progeny. We mapped two quantitative trait loci (QTLs) with selective effects on striatal architecture. Bsc10a maps to the central region of Chr 10 (LRS of 17.5 near D10Mit186) and has intense effects on striatal volume and moderate effects on brain volume. Stnn19a maps to distal Chr 19 (LRS of 15 at D19Mit123) and is associated with differences of up to 400,000 neurons among animals. + +Conclusion + +We have discovered remarkable numerical and volumetric variation in the mouse striatum, and we have been able to map two QTLs that modulate independent anatomic parameters. + +Background + +The dorsal striatum is a massive nucleus in the basal forebrain that plays a pivotal role in modulating motor activity and higher cognitive function. Approximately 90% of all neurons in the striatum - 1.5 to 2.5 million in mice [1,2] and 110-200 million in humans [3,4] - belong to an unusual type 'of inhibitory projection cell referred to as medium spiny neurons [5-8]. Striatal neurons are divided into two major subpopulations (patch and matrix), that have somewhat different gene expression profiles and have different patterns of pre- and postsynaptic connections [9-13]. + +Numbers of medium spiny neurons and ratios of these and less numerous striatal interneurons are critical variables that influence motor performance and aspects of cognition. In the case of Huntington disease the loss of 15-30% of the normal complement of medium spiny neurons leads to distinct movement disorder in both humans and transgenic mouse models [14-17]. The subset of genes that normally control the proliferation, differentiation, and survival of striatal neurons [18-20] are therefore of considerable importance in ensuring adaptive behavior at maturity. + +In this study we use a forward genetic approach [21, 22] to begin to map and characterize members of the subset of normally polymorphic genes that specifically modulate the production and survival of striatal neurons. Our analysis of the neurogenetic control of striatal cell populations relies on the combination of two complementary quantitative approaches. The first of these, complex trait analysis, is a comparatively new genetic method that makes it possible to map individual loci that underlie polygenic traits [22,23]. The second consists of a set of unbiased stereological procedures that can be used to obtain cell counts accurately and efficiently from large numbers of cases [24,25]. + +From a technical point of view the mouse striatum has several advantages that make it an excellent target for complex trait analysis of the mammalian CNS. First, it is a large, cytoarchitectonically distinct region comprising approximately 5-6% of the volume of the mouse brain. Second, the dorsal striatum has a comparatively homogenous cellular composition, potentially reducing the number of quantitative trait loci (QTLs) that affect striatal neuron number. Finally, recent experiments on the molecular control of telencephalic development have highlighted a number of genes that influence neuron proliferation and differentiation of the striatum and other neighboring forebrain structures [18][26-30]. + +We report here both neuroanatomic and genetic quantitative evidence that the size of the striatum and the number of neurons contained within it are modulated independently. + +Results + +The results are divided in two sections. The first is a biometric analysis of variation of size and neuronal populations in mouse striatum. The second section is a quantitative genetic dissection and QTL analysis of variation in the size and neuronal population of the mouse striatum. + +Phenotypes + +Strain differences + +Brain Weight and Striatal Volume. Five strains were chosen to represent low, mid, and high brain weights (Fig 1A). Brain weights of the two high strains, BXD5 (540 ± 9 mg SEM) and BALB/cJ (527 ± 13 mg), are significantly greater (P < .001) than that of C57BL/6J (476 ± 5 mg). Similarly, the brain weights of A/J (395 ± 5 mg) and DBA/2J (403 ± 5 mg) are significantly lower than those of the other three strains (P < .001). As anticipated, differences in striatal volume correspond well with differences in brain weight and volume. The striata of BXD5 (31.0 ± 0.9 mm3) and BALB/cJ (32.5 ± 1.6 mm3) mice are significantly larger (P < .001) than those of C57BL/6J (23.6 ± 0.6 mm3), A/J (21.7 ± 1.0 mm3), and DBA/2J (22.8 ± 0.6 mm3) strains. + +Figure 1 + +Histograms of histologic phenotypes for inbred strains of mice.  A. Brain weight differences are apparent between the three categories (F4,28 = 82.1, P < .001). Asterisk indicates significant differences on post-hoc tests (P < .005). B. Striatal volume. There are significant differences in striatal volume between the low brain weight strains (A/J, DBA.2J) and the high brain weight strains (BALB/cJ, BXD5). C57BL6/J mice differ from the high, but not low brain weight strains (F4,28 = 28.9, P < .001). Asterisk indicates significant differences on post-hoc tests (P < .005). C. Neuron-packing density in the striatum. In general, brains with smaller striata have greater neuron-packing density (F4,28 = 17.6, P < .001). Asterisks indicate significant differences on post-hoc tests (P < .005). D. Neuron number in the striatum. There are no significant difference in striatal neuronal number among the five inbred strains (F4,28 = 2.0. ns). + +Striatal Neuron-Packing Density. There is a significant difference among strains in the packing density of striatal neurons (P < .001 for all comparisons). A/J has a higher mean density (84,800 ± 3,500 neurons/mm3) than all strains other than DBA/2J (80,400 ± 2,700 neurons/mm3). BALB/cJ (57,700 ± 2,500 neurons/mm3) and BXD5 (62,700 ± 2,600 neurons/mm3) do not differ significantly from each other, but do differ from all other strains. C57BL/6J (73,100 ± 1,700) differs from all other mice with the exception of DBA/2J. Inbred strains with smaller striatal volumes have higher neuronal packing densities (Fig 1C). + +Striatal Neuron Number. As a result of the reciprocal relation between volume and density, there is no significant difference in striatal neuron number among the five strains. Total striatal neuron numbers ranges over a very modest range - from a low of 1.72 ± .015 million in C57BL/6J to a high of 1.93 ± .035 million in BXD5. + +Correlational Statistics + +Our comparisons are based on five strains, and one consequence of this modest sample size is that sampling errors and intraclass correlations may bias the results [31]. We therefore also analyzed a larger sample of genetically heterogeneous ABF2 intercross animals (an F2 intercross between A/J and BXD5). We first determined that the distribution of all four dependent measures were normally distributed (Fig 2), before subjecting the data to correlational analysis. In this set of animals brain weight correlates significantly with striatal volume (r = .82, df = 42, P < .001, Fig 3A). Striatal volume is negatively correlated with neuron-packing density overall (r = -0.32, df = 42, P < .05), again indicating that the greater the striatal volume, the lower the neuron-packing density (Fig 3B). Despite this relationship, the total population of striatal neurons correlates positively with striatal volume in this larger sample (r = .60, df = 42, P < .001; Fig 3C). In this crucial respect, results from the genetically heterogeneous F2 animals differ from those of inbred strains. + +Figure 2 + +Histograms of distribution of dependent measures in ABDF2 subjects. Brain weight (A: Χ2 = 2.91, df = 2, ns), striatal volume (B: Χ2 = 1.13, df = 2, ns), striatal neuron-packing density C: Χ2 = 1.64, df = 2, ns), and striatal neuron number (D: Χ2 = 0.73, df = 2, ns) are all normally distributed (Kolmogorov-Smirnov Normality Test). + +Figure 3 + +Scatterplots of subjects from an F2 intercross between a BXD5 and A/J inbred strains (ABF2, N = 44) illustrating correlations of striatal volume with brains weight (A), striatal neuron-packing density (B), and striatal neuron number (C). There are significant positive correlations between striatal volume and both brain weight and neuron number. Striatal volume negatively correlates with neuron-packing density in these subjects. ***P < .001; *P < .05. + +QTL Analysis + +The analysis in this section is focused principally on two traits: striatal volume (absolute and residual values), and striatal neuron number (also absolute and residual values). Residuals for these traits were computed for both traits to minimize the influence of brain weight. Two additional traits were mapped to assess specificity of the effects of putative QTL-bearing intervals, namely brain weight and non-striatal brain weight (Table 1). This last parameter was estimated by subtracting the estimated bilateral striatal weight (assuming a specific gravity of 1.0) from that of the whole brain. + +Table 1 + +Linkage Statistics for Striatal Volume and Neuron Number + +** Alleles inherited from BXD5 that increase a value are defined as positive additive effects. † LRS values can be converted to LOD scores by dividing by 4.6. Previously described QTL for brain weight [56]. Column headings:Trait, the phenotype used in linkage analysis; Marker, the symbol of the microsatellite loci used to genotype mice; Chr, the chromosome on which the marker is located; LRS is the likelihood ratio statistic (4.6 x the LOD score); %Var is the percentage of the total phenotypic variance apparently accounted for by differences in genotype in the an interval defined by the marker; P, the point-wise probability that the linkage is a false positive. Add and Dom are estimates of the additive and dominance effects of genetic variation. Units are the same as those of the traits (volume in mm3 or numbers of cells). The two bold loci marked with asterisks achieve genome-wide significance in this sample population. + +The strongest linkage was found between variation in striatal volume and an interval on chromosome 10 between the markers D10Mit194 at 29 cM and D10Mit209 at 49 cM. The likelihood ratio statistic - a value that can be read as a chi-square - peaks in this 20 cM interval at 17.5 and is associated with a P value of 0.00016 (Table 1), equivalent to a LOD score of 3.8 (Fig 4A). The genome-wide probability of achieving a linkage of this strength by chance is <0.05. This locus accounts for as much as a third of the total phenotypic variance in striatal volume and as much as 50% of the genotypic variance (h2 = 0.39). Alleles in this Chr 10 interval that are inherited from the BXD5 parental strain contribute to a significantly larger striatum than do alleles inherited from A/J. Mean bilateral volume corrected for shrinkage for the AA genotype at D10Mit186 (n = 11) is 25.3 ± 1.3 mm3 whereas that for AB and BB genotypes are 29.1 ± 0.7 mm3 and 30.0 ± 0.5 mm3 (n = 14 and 11), respectively. The insignificant difference between BB and AB genotypes suggests that the B allele is dominant. BXD5 is a recombinant inbred strain initially generated by crossing strains C57BL/6J and DBA/2J. Most of the proximal part of Chr 10 in BXD5 is derived from DBA/2J, but a short interval between 40 and 50 cM is derived exclusively from C57BL/6J. This C57BL/6J region corresponds to the peak LRS score. We estimate a single B allele inherited from the BXD5 parent increases striatal volume by approximately 2.0-2.5 mm3. + +Figure 4 + +Plots of LOD scores and LRS for each of the two traits. A. Plot for Striatal volume on Chr. 10. Peak values for the LRS are around 30 cM. B. Plot for striatal neuron number on Chr. 19. Peak values for the LRS are around 50 cM. + +The Chr 10 interval has an appreciable effect on brain size. Variance in brain weight minus that of the striatum is associated with an LRS of 14.2 in the same location between D10Mit106 and D10Mit186. Each B allele adds 20-30 mg to total brain weight. The Chr 10 locus clearly has pleiotropic effects on the CNS, but its effect on the striatum is more intense. Nonetheless, until we know more about the scope of effects, we have opted to give this Chr 10 locus a generic name, Brain size control 10a (Bsc10a). The specific striatal component of the Bsc10a was analyzed by mapping the residual striatal values that corrects for differences in brain volume. The specific effect of a B allele is reduced from 2.5 mm3 to 0.5-1.0 mm3, and the LRS is reduced to 6.9, a value which still has a point-wise probability of only 0.03, indicating a significant independent effect. + +We identified a second strong candidate interval on distal Chr 19 that may modulate striatal neuron number. The LRS peaks at 15.0 (a LOD of 3.26) at one of our more distal markers (D19Mit123, 51 cM, p = .00055). In mapping neuron number we actually used the residual cell population as a trait, and we are therefore confident that this interval has a selective, although not necessarily exclusive, effect on numbers of neurons in striatum (Fig 4B). Each B allele increases the population by approximately 200,000 cells. The AA genotype has an average residual population that is 116,000 less than the mean (i.e., a residual of -116,000; n = 12), the AB heterozygotes have an average of -8,000 neurons (n = 18), and the BB homozygotes have an average of 290,000 neurons (n = 6). Corresponding absolute numbers of striatal neurons for the three genotypes are 1.8, 1.9, and 2.2 million. The two-tailed genome-wide probability of this locus is at the threshold for declaring a QTL (p = 0.035 ± 0.01 two-tailed for an additive model and 0.08 ± 0.2 for a free model). No other chromosomal interval has an LRS score remotely as high as distal Chr 19. The next highest LRS value is only 7.2 on Chr 1 near D1Mit65 and has a point-wise probability that is 50 times higher than the Chr 19 interval. Given these findings we have given the distal chromosome 19 interval the name Striatal Neuron Number 19a (Stnn19a). Allelic differences in this interval account for up to 30% of the total variance in striatal neuron number. As the heritability of this trait is 0.64, this trait can be said to account for over 80% of the genetic variance. Residual neuron counts have a higher LRS than the total neuron counts (LRS of 15.0 vs. 11.9). This indicates that the Chr 19 interval is likely to have selective effect on the striatum. Consistent with this hypothesis, the LRS for brain weight on distal Chr 19 is under 1.0, and weights of all three genotypes average 480 ± 5 mg. Linkage on Chr 19 is not affected at all by remapping with control for the striatal volume locus on Chr 10. Thus, Chr 10 and Chr 19 intervals do not interact or cooperate in controlling striatal volume or neuron number. + +Discussion + +Striatal volume correlates strongly to brain weight. Nonetheless, a significant fraction of the variation in both striatal volume and neuron number among inbred strains of mice can not be predicted on the basis of brain weight or volume. This non-predictable variation is of particular interest to us because it is generated in large part by genes that have more intense or even selective effects on the dorsal striatum than other brain regions. We have succeeded in mapping one QTL with somewhat more intense effects on the volume of the striatum than the rest of the brain to the proximal half of chromosome 10. We have also mapped a QTL with selective effects on number of neurons in the striatum to the distal end of chromosome 19. + +Between-strain variability + +Variation in the size of CNS regions and cell populations is already known to be substantial in the striatum and in many other regions of the CNS. The number of striatal cholinergic neurons, for example, varies 50% among 26 BXD RI lines [32]. Interestingly, this variation appears to be unrelated to susceptibility to haloperidol-induced catalepsy. The volume of the granule cell layer of the dentate gyrus varies as much as 40-80% among different inbred strains of mice [33-35]. More recent experiments using stereologic techniques have reported substantial variation in both neuron number and volume of the pyramidal and dentate cell layers of the hippocampus [36]. Granule cell numbers in NZB/BINJ and DBA/2 were 37-118% greater than C57BL/6J mice, and differences in volume were even larger (up to 150% larger in the DBA/2 as compared to the C57BL/6J mice). There is also substantial among-strain variation in other structures in the nervous system including the nucleus of the solitary tract [37], the spinal nucleus of the bulbocavernosus [38], and retinal ganglion cells [39, 40]. Taken together, these results point to a high level of variability in neuron number in the CNS of mice. + +Based on these findings, we anticipated significant differences in the striatum of inbred strains. We did find large strain differences in volume. What was surprising was that in our set of five highly divergent strains the differences in volume were not matched by significant differences in neuron number. There was in fact a strong inverse relationship between striatal volume and neuron-packing density that led to a remarkably stabile neuron number. The variation in neuron-packing density with volume contrasts somewhat with the report of Abusaad and colleagues [36], who found no significant differences (P = .06) in neuronal packing density in the dentate gyrus cell layers of the hippocampus among the three mouse strains that they examined, but did see a significant difference in the pyramidal cell layers. A recent report demonstrates a 25% range of granule cell packing density among 35 BXD recombinant inbred lines [41], a finding supporting the notion that packing density varies significantly among mouse strains. + +These data suggest that principles that govern the relationship between neuronal volume and neuron-packing density may differ between the striatum and the other CNS regions. The striatum may be a special case - a region in which numbers of medium spiny neurons is more tightly regulated than neuron populations in some other regions. It could also be that measuring specific neuronal subtypes would demonstrate a greater amount of variance than we currently report [32]. Given the relatively small number of strains that we have sampled, our hypothesis of lower variation in striatal cell populations requires a more extensive test, a problem which we are now pursuing using the large numbers of strains in the Mouse Brain Library . + +Verification of QTL Results + +We have quantified the population of striatal neurons on both sides of the brain in 77 cases total. This is a large sample from the perspective of stereological analysis of the mouse CNS, but from the perspective of gene mapping and quantitative genetics this is, of course, a modest-sized sample size and one that will need to be treated as a starting point for more refined genetic analysis. Nonetheless, we have succeeded in mapping one locus, Bsc10a, which modulates striatal volume with a genome-wide significance of P < 0.05. We have also discovered linkage on Chr 19 to variation in the total number of striatal neurons. These mapping data are concordant with our strain comparison and collectively suggest that there is apparently no significant genetic correlation between striatal volume and neuron number. To confirm and refine our genetic dissection of the striatum we plan to analyze the AXB and BXA recombinant inbred (RI) strains generated by crossing A/J with C57BL/6J. This large RI set has already been processed and regenotyped and is now part of the Mouse Brain Library (see and ). An analysis of RI strains can be quickly extended by generating F1 intercrosses between A/J and the subset of RI strains that have recombinations in the QTL intervals on Chrs 10 and 19. Isogenic sets of RI-backcross progeny can be used to test specific models of gene action, for example, the dominance of the B allele at Bsc10a. + +A major goal of QTL mapping is to define loci that affect critical phenotypes with sufficient precision to generate short lists of candidate genes. Generating lists of candidates for QTLs will soon be greatly facilitated by more complete and better annotated mouse and human sequence databases combined with information on gene expression profiles of whole brain and striatum [42]. Once chromosomal positions of the QTLs have been determined to a precision of 1-3 cM, reducing the probability that a QTL actually represents a cluster of linked genes, it will become appropriate to assess strengths of candidates using transgenic animals and by sequence comparisons [43]. + +Interval mapping places the QTL for Bsc10a in the central portion of Chr 10 in proximity with a number of genes known to affect brain development. One of these is Grk2, a member of the family of ionotropic glutamate receptor genes that is thought to play a role in modulating Huntington disease [44]. In the mouse, members of this receptor type act to indirectly down-regulate synaptic activity in the striatum [45]. Another gene that falls into the Bsc10a interval is Macs, the gene encoding the myristoylated alanine-rich C kinase substrate (MARCKS protein). This molecule is important in cerebral development. MARCKS-deficient mice have a high incidence of exencephaly, agenesis of the corpus callosum, and abnormalities other forebrain structure including widespread neocortical ectopias [46, 47]. The MARCKS-related protein gene is expressed in the striatum during early brain development in the rat [48]. + +The location of the QTL modulating striatal neuron number to the distal part of chromosome 19 places it in proximity to a number of genes that have been recently been shown to be important factors in telencephalic development, particularly Vax1. Vax1 is a homeobox-containing gene and is a close relative of the Emx and Not genes. Vax1 is localized during development to the anterior ventral forebrain, and is expressed in the striatum during embryogenesis [28]. This molecule also has an important role in axon guidance: both the anterior portion of the corpus callosum and the optic chiasm are malformed or absent in Vax1 knockout mice [49]. In addition, Vax1 interacts with several molecules including sonic hedgehog,Pax2, Pax6, and Rx that are known to be important during development of the basal forebrain [27, 50]. + +Brain volume and neuron number + +It has previously been shown that differences in brain weight are proportional to total brain DNA content and consequently to total CNS cell number [51, 52]. For this reason, brain weight has been suggested to be a good surrogate measure for total cell number in mice, as in humans [53]. Moreover, previous work has demonstrated a tight link between regional brain volume and neuron number [54, 55], which implies that volumetric measures reliably estimate neuron number. With this literature in mind, we expected that our measures of striatal volume would predict neuron number in this nucleus. With the inbred strains, however, we found that strains with small striata (A/J) had virtually the same number of neurons as those with large striata (BALB/cJ). This result indicates that at least for the striatum, volume is not a reliable indicator of neuron number, and that they may be two independent traits. This conclusion is bolstered at the genetic level by our report of two distinct QTLs for these two morphologic phenotypes. Taken together with previous reports [51-53], we speculate that while total neuron number in the cerebrum may relate to total brain weight, the relationship of these two variables is flexible at the regional level. + +Materials and Methods + +Subjects + +Thirty-four of the 78 mice that we analyzed were common inbred strains that were selected to sample a wide range of brain weights, and by expectation, striatal volumes. Low brain weight strains included A/J (n = 5) and DBA/2J (n = 8). Mid and high brain weight strains include C57BL/6J (n = 10), BALB/cJ (n = 5), and BXD5 (n = 6, formally this recombinant inbred strain is known as BXD-5/Ty). One of the ten C57BL/6J subjects was removed from the analysis because values for striatal neuron number were anomalous with Z scores more than 2.5. + +To map QTLs that modulate variation in CNS size and cell populations we used an F2 intercross between a strain with low brain weight (A/J) and a strain with high brain weight (BXD5). A total of 518 of these ABDF2 progeny were generated, but for this study we selected a subset of 44 cases, of which 36 were fully genotyped (see below). The sample included 20 animals in the lowest and highest quartiles, and 24 cases within 0.5 SD of the mean brain weight. We therefore measured subjects representing the full range of brain weights (see Fig 2A). The ABDF2 intercross has been used previously to map QTLs that modulate total brain weight [56] and cerebellar volume [57]. The BXD5 strain used as the paternal strain in this intercross is a recombinant inbred strain that was derived by crossing C57BL/6J and DBA/2J lines of mice [58]. As a result, ABDF2 progeny are a mixture of three genomes (50% A/J, 25% C57BL/6J, and 25% DBA/2J). However, at any given locus there will be only two alleles, A and B, or A and D. All stocks of mice were obtained from the Jackson Laboratory . ABF2 mice were generated at the University of Tennessee by Dr. Richelle Strom [56] using Jackson Laboratory foundation stock. The F2 mice ranged in age from 35 to 143 days. The standard inbred strains ranged in age from 51 to 365 days. We studied approximately equal numbers of males and females. + +Histological Preparation + +All brains analyzed in this study are part of the Mouse Brain Library (MBL). The MBL is both a physical and Internet resource. High-resolution digital images of sections from all cases are available at . + +Mice were anesthetized deeply with Avertin (1.25% 2,2,2-tribromoethanol and 0.8% tert-pentyl alcohol in water, 0.5-1.0 ml ip) and perfused through the left ventricle with 0.9% sodium phosphate buffered (PB) saline (pH 7.4) followed by 1.25% glutaraldehyde/1.0% paraformaldehyde in 0.1 M PB (pH 7.40) over a period of 2 to 4 min. An additional 10-ml of double-strength fixative (2.5% glutaraldehyde/2.0% paraformaldehyde) was injected for 1 to 2 min at an increased flow rate. The head with brain was placed a vial with the last fixative and stored at 4°C until dissection. + +Following dissection, the brains were weighed immediately. Brains were subsequently shipped to Beth Israel Deaconess Medical Center. They were immersed in fresh 10% formalin for at least one week before being embedding in celloidin [59]. Brains were cut on a sliding microtome at 30 μm in either horizontal or coronal planes. Free-floating sections were stained with cresylechtviolett and four series of every tenth section were mounted on slides and coverslipped (see for further details). + +Histologic Phenotypes + +Total Brain Volume + +To accurately estimate histological shrinkage for each brain in the sample, we determined the volume of the entire brain and took a ratio of this value to the original fixed brain weight. Brain volumes were determined from serial sections using point counting and Cavalieri's rule. High-resolution (4.5 μm/pixel) images of entire sections were taken from the Mouse Brain Library, and point counting was performed on these images using NIH Image 1.55 and an Apple Macintosh computer . If the criteria for using the Cavalieri's estimator were not met (due to missing or damaged sections), a measurement method involving piecewise parabolic integration was employed [60]. Subsequent measurements of striatal volume and neuron packing density were corrected for volumetric shrinkage. The average shrinkage was 62.2 ± 0.4% (a mean residual volume of 37.8%). + +Striatal Volume + +Volume of the striatum was also determined from serial section analysis using point counting and Cavalieri's rule. Images from the sections were captured at 12.5 x and were projected onto a video monitor. Point counting was performed as above. Volume was computed separately for the right and left sides and corrected for shrinkage. + +Striatal Neuron-Packing Density and Neuron Number + +Neurons were counted using the 3-dimensional counting software of Williams and Rakic [24]. A series of six contiguous counting boxes (each 40 x 65 x 20 μm) aligned in a 3 x 2 matrix were placed randomly within the striatum, and those neurons the nucleoli of which were in focus were counted as described previously [61, 62]. This large functional counting box (80 x 195 x 20 μm) was chosen to minimize sampling variance by ensuring an equitable sampling of striatal patch and matrix. Two of these large fields were counted in each of the hemispheres. Neuron-packing density was computed as the number of cells/mm3 corrected for shrinkage. Multiplying the volume of the striatum by its cell-packing density permitted estimation of the number of neurons in that nucleus. + +Reliability + +We determined test-retest reliability by having an observer blindly re-measure striatal volume on a subset of 10 brains from the collection. The observer not only re-measured the striatal volume from the same series of sections as the original measure, but also estimated volume from a second series of 1 in 10 sections offset by 5 sections from the previous series. The correlations among the three estimations ranged from .95 to .99 (P < .05), indicating a high degree of reliability for this dependent variable. + +We assessed reliability of our estimates of neuronal numbers by having an observer blindly re-estimate neuron number in the same 10 brains above. The intra-observer correlation for this measure was .81 (P < .05), which is similar to the reliability seen in previous estimates of neuron number [39, 40]. + +Genotyping and QTL Mapping + +Genomic DNA was extracted from spleens of F2 animals using a high-salt procedure [63]. A set of 82 microsatellite loci distributed across all autosomes and the X chromosome were typed in a set of ABDF2 animals using a standard PCR protocol [64, 65] as detailed in Zhou and Williams [66]. F2 genotypes were entered into a spreadsheet program and transferred to Map Manager QTb28 for mapping and permutation analysis [67]. Map Manager implements both simple and composite interval mapping methods described by Haley and Knott [68]. Two-tailed genome-wide significance levels were estimated by comparing the highest likelihood ratio statistic (LRS) of correctly ordered data sets with LRSs computed for 10,000 permutations of those same data sets [69]. LRS scores can be converted to LOD scores by dividing by 4.6. The 2-LOD support interval of linkage was estimated directly from interval maps. The approximate 95% support interval was estimated by application of equations in Darvasi and Soller [70]. With a modest sample size such as we have been able to examine using unbiased stereological methods, even a QTL responsible for 30 to 50% of the variance. is associated with a 95% interval of 20 to 30 cM. + +Regression Analysis of Trait Values + +The unadjusted striatal estimates vary to a large extent as a result of variation in total brain weight. However, one of our goals in this study is to map QTLs with relatively intense effects on the striatum. For this reason we also have corrected all of the parameters used in the mapping analysis for variation in brain weight using linear regression analysis. We have mapped data with and without compensation for variance in brain weight. The corrected values are referred to as residuals. + +Analysis + +All data were analyzed using regression, correlation, and ANOVA statistical tests (see StrAnatData.xls for original data used to perform this analysis). A Bonferroni/Dunn correction was used for post hoc examination of significant main effects in the ANOVA. This post-hoc test is functionally identical to a Fisher PLSD, but the alpha level is more conservative (.005). + +Supplementary Material + +StrAnatData.xls + +This file contains anatomic data for each of the subjects used in the current experiment. + +Click here to download StrAnatData.xls + +StrMap.qtx + +This file contains the genotyping data from the 82 markers used in the current experiment, in MapManager QTX format. + +Click here to download StrMap.qtx + +Acknowledgements + This work was supported, in part, by grants HD20806 and NS35485 from the Public Health Service of the USA. The authors wish to thank Dr. Jing Gu, Aaron Levine, Anna Ohlis, and Stefany Palmieri for technical assistance. We thank Richelle Strom for generating the F2 intercross mice. \ No newline at end of file diff --git a/src/test/resources/test_load_old_coreference/Articles/11532192.txt b/src/test/resources/test_load_old_coreference/Articles/11532192.txt index 515018ae..ea676afa 100644 --- a/src/test/resources/test_load_old_coreference/Articles/11532192.txt +++ b/src/test/resources/test_load_old_coreference/Articles/11532192.txt @@ -1,229 +1,229 @@ -Intraocular pressure in genetically distinct mice: an update and strain survey - -Abstract - -Background - -Little is known about genetic factors affecting intraocular pressure (IOP) in mice and other mammals. The purpose of this study was to determine the IOPs of genetically distinct mouse strains, assess the effects of factors such as age, sex and time of day on IOP in specific strain backgrounds, and to assess the effects of specific candidate gene mutations on IOP. - -Results - -Based on over 30 studied mouse strains, average IOP ranges from approximately 10 to 20 mmHg. Gender does not typically affect IOP and aging results in an IOP decrease in some strains. Most tested strains exhibit a diurnal rhythm with IOP being the highest during the dark period of the day. Homozygosity for a null allele of the carbonic anhydrase II gene (Car2n) does not alter IOP while homozygosity for a mutation in the leptin receptor gene (Leprdb) that causes obesity and diabetes results in increased IOP. Albino C57BL/6J mice homozygous for a tyrosinase mutation (Tyrc-2J) have higher IOPs than their pigmented counterparts. - -Conclusions - -Genetically distinct mouse strains housed in the same environment have a broad range of IOPs. These IOP differences are likely due to interstrain genetic differences that create a powerful resource for studying the regulation of IOP. Age, time of day, obesity and diabetes have effects on mouse IOP similar to those in humans and other species. Mutations in two of the assessed candidate genes (Lepr and Tyr) result in increased IOP. These studies demonstrate that mice are a practical and powerful experimental system to study the genetics of IOP regulation and disease processes that raise IOP to harmful levels. - -Background - -Glaucoma is a leading cause of blindness but its molecular etiology is poorly understood. Glaucoma involves retinal ganglion cell death and optic nerve damage that is often associated with elevated intraocular pressure (IOP) [1-5]. - -It is becoming increasingly clear that many forms of glaucoma have a genetic component [6,7], and much current research is focused on identifying chromosomal regions and genes that contribute to glaucoma [8-10]. Identifying such loci allows screening for individuals with an increased risk of developing glaucoma [11]. Identifying genes contributing to elevated IOP and glaucoma is only the first step, however, and animal models will provide systems for subsequent hypothesis testing and experimental dissection of pathogenesis. - -Due to conservation in mammalian physiology and the powerful tools of mouse genetics, mice are a very important experimental system for probing the functions (both in health and disease) of many genes recently identified by sequencing the human genome [12]. We have focused on developing the mouse system for IOP and glaucoma studies [13-19]. Mice are expected to be extremely helpful in characterizing genes and mechanisms that affect IOP or the susceptibility of the optic nerve and retina to glaucomatous damage [20]. - -Very little is known about the magnitude of IOP of various mouse strains or IOP fluctuation in mice with time or other factors. Previously, we developed a method to measure IOP in mice and reported initial findings on the magnitude of mouse IOP [13]. The procedure involves direct measurement of pressure following cannulation of the anterior chamber. The initial experiments demonstrated that in our hands careful ocular cannulation has a very minor effect on IOP (average of -0.3 mmHg, mode -0.5 mmHg) and demonstrated significant differences in intraocular pressure levels between four mouse strains. Here, we provide an update, including an extensive strain survey, and show that the methodology is reliable and produces reproducible data over extended periods of time. - -Results - -A broad range of IOPs between strains - -Figure 1 shows the average IOP of a number of inbred mouse strains that were housed in the same environmental conditions. There is a wide range of IOP with strain BALB/cJ having one of the lowest average IOPs (11.1 ± 0.5 mmHg) and strain CBA/CaJ one of the highest IOPs (19.3 ± 0.3 mmHg). Significant differences exist among various strains (P < 0.0001 for all groups, ANOVA comparing strains within each sex group). - -Figure 1 - -An almost two-fold range of IOP between genetically distinct mouse strains. Mean IOP ± SEM is shown for each strain. Twelve to 25 mice were analyzed for each strain (typically 18 to 20), except for RIIIS/J (7 mice). Mice of most strains were 6 to 12 months old, except for SEC/1ReJ and SB/Le that were 2 to 3 months old. Approximately half of the CE/J and one third of the BUB/BnJ mice were 16 months old and were pooled with the younger mice, as the IOPs of both ages were the same. Strain name CBA/CaHN-Btkxid/J is abbreviated to CBA/CaHN. - -Clinical and histological analysis of the eyes of all studied strains (see Table 1) did not identify anatomic or pathologic features that might account for the differences in IOP. For example, the iridocorneal angle and aqueous humor drainage structures are open to the anterior chamber and have normal morphology in both BALB/cJ and CBA/CaJ mice (Figure 2). More than 20% of CBA/CaJ mice had IOPs of over 21 mmHg, which increases risk for glaucoma in humans. We aged a small group of these mice (n = 4) to 2 years and histologically analyzed their optic nerves and retinas but they did not develop glaucoma. - -Figure 2 - -Normal iridocorneal angles in strains with high and low IOP. The iridocorneal angle that contains the aqueous humor drainage structures (Schlemm's canal (SC) and trabecular meshwork (TM) had a normal morphology in strains CBA/CaJ (A, high IOP), BALB/cJ (B, low IOP) and all other strains. Pigment filled macrophages that resemble human clump cells were often located in the angle of CBA/CaJ mice but were never sufficient to block drainage. We have observed similar quantities of these cells at this location in other strains with lower IOP. The angle recess between the cornea (C) and iris root (I) was open and not occluded. Aqueous humor passes through this recess before entering the drainage structures. Original Magnification 630X. - -Table 1 - -Ocular abnormalities in various strains - -All strains shown in Figure 1 were evaluated but only strains with abnormalities are shown. For incidence, the numerator indicates the number of mice or eyes affected and the denominator indicates the total number analyzed. The mice were 6 to 12 months old at the time of analysis and were not studied at other ages unless indicated. Histological analysis confirmed these observations and also identified calcified cyst like structures in the iris epithelium of strains SB/Le and SEC/1ReJ. A low incidence of corneal scarring was noted in some strains and likely resulted from a scratched cornea. Previously described retinal degeneration [[81]] caused by homozygosity for the Pde6brd1mutation was noted in strains SB/Le, ST/bJ, BUB/BnJ, CBA/J, C3H/HeJ, SJL/J and SWR/J. - -Strain differences are reproducible - -To assess the consistency of IOP in specific strains, we measured IOP in different cohorts of each strain maintained under similar conditions at different times. We purposefully included strains at each end of the IOP spectrum, and strain C57BL/6J (B6) that is commonly used for genetic experiments (Figure 3). The average IOP of different cohorts of strains CBA/CaJ, CBA/CaHN (both high end of spectrum) and B6 were consistent over time. This was true of most strains assessed on multiple occasions. Average IOP for age matched mice of the same strain assessed at different times typically differed by no more than 1.5 mmHg, and the differences were usually smaller. Strain 129P3/J was the most variable strain with the average IOP fluctuating by up to 2.5 mmHg. - -Figure 3 - -The IOPs of different strains are stable and reproducible over time. Mean IOP ± SEM is shown for the indicated strain at different times of measurement. The measurement times within a single year were separated by a few months. The IOPs of strains that were analyzed multiple times in the same year are listed in the chronological order that they were obtained with the earliest measurement on left. The sex [Male (M) or Female (F)], age (months), and number of mice (n) analyzed for the CBA strains are listed starting with the earliest measurement and ending with the latest: CBA/CaJ, F, n = 22, age 6–7; M, n = 11, age 2; CBA/CaHN, F, n = 16, age 3; M, n = 8, age 3. For BALB/cJ and C57BL/6J, all groups were male and primarily 3 to 4 months old. The number of mice analyzed at each time follows: BALB/cJ 8, 10, 11, 15, 18 and 14, C57BL/6J 10, 14, 21,40,40 and 42. Strain name CBA/CaHN-Btkxid/J is abbreviated to CBA/CaHN. - -Despite the general consistency of IOP, the average IOPs of some strains have changed in a reproducible manner. The IOPs of BALB/cJ mice (low end of spectrum) were very similar for the past several years, around 11 mmHg. Between early 1996 and 1997, however, the IOP of this strain did jump from approximately 7.7 mmHg to approximately 11 mmHg (Figure 3). During this period, the room in which our animals were housed and the manufacturer of the mouse diet were changed. Over the same period, the IOP of A/J also increased dramatically, from 9.4 ± 0.5 mmHg (n = 11) in 1996 to 14.2 ± 0.4 mmHg (n = 19) in 1997. The increased IOP in A/J also was reproducible, with the average IOP of mice assessed in the year 2000 being 14.5 ± 0.4 mmHg (n = 16). Importantly, the IOPs of strains B6 and C3H/HeJ did not change during this time (B6, 12.3. ± 0.5 mmHg in 1996 and 12.4 ± 0.3 mmHg in 1997, n= 10 and 14; C3H/HeJ, 13.7 ± 0.8 mmHg in 1996 and 13.6 ± 0.2 mmHg in 1997, n = 9 and 19). - -Effect of age on IOP - -We focused on the commonly used B6, 129P3/J and C3H/HeJ strains to determine the effects of age on IOP (Figure 4). In B6, age had a significant effect on IOP (P < 0.001). IOP was slightly decreased at both 12 months (12.2 ± 0.2 mmHg) and 19 months (12.2 ± 0.3 mmHg) compared to 3 months (13.1 ± 0.3 mmHg) and 7 months (13.3 ± 0.3 mmHg). Although the decrease was of a similar level to the variation observed in 3 month old mice (see Figure 3), the IOPs of control young mice (see Methods) analyzed at the same times as the various B6 age groups did not decrease. For example, control mice analyzed at the same time as the 3 month, 12 month and 18 month B6 age groups had IOPs of 13.0 ± 0.2 mmHg (n = 14), 13.3 ± 0.2 mmHg (n = 14), 13.7 ± 0.4 mmHg (n = 12), respectively. IOP was even lower in the 24 month B6 mice (10.8 ± 0.4 mmHg), and again the average IOP of young controls measured at the same time was not changed (13.5 ± 0.2, n = 12). - -Figure 4 - -IOP changes with increasing Age. Mean IOP ± SEM is shown for the indicated strain at different ages. IOP decreased significantly in strains C57BL/6J and 129P3/J but not C3H/HeJ. The C57BL/6J and 129P3/J groups consisted of approximately equal numbers of males and females. The 3 months old C3H/HeJ mice were male while the other ages were composed of males and females. The number of mice analyzed at each age, listed from youngest to oldest, follow: C57BL/6J, 18, 18, 18, 18, 13; 129P3/J, 18, 15, 16, 14, 21; C3H/HeJ, 15, 23 17 and 16. - -In strain 129P3/J, IOP did not differ significantly with age between 3 and 14 months but was lower in 18 month old mice (P < 0.001 compared to all younger ages, Figure 4). Despite a 1 mmHg dip in IOP at 8 months, there were no significant IOP differences between C3H/HeJ mice at each age tested (P = 0.2 for age). Although the effect of age has not been thoroughly assessed in other strains, no obvious age-related differences have been identified in other strains analyzed at multiple ages except for the glaucomatous DBA/2J and AKXD-28/Ty strains [14,19]. - -Effect of sex on IOP - -Although we have not rigorously assessed the effect of sex on IOP in many strains, sex specific differences have not been detected in the majority of strains for which both sexes have been analyzed, and have proven inconsistent even within an individual strain analyzed multiple times. Strains B6 and 129P3/J have been extensively evaluated at multiple ages between 3 and 24 months of age. Sex differences were always absent in strain 129P3/J and typically absent in strain B6. In strain B6, however, males infrequently had significantly higher IOP than females. For example, in one experiment, B6 males had an average IOP of 14.2 ± 0.3 mmHg (n = 12) whereas the average IOP of females was 13.1 ± 0.3 mmHg (n = 12, P = 0.01). If real, this sporadic sex difference was not dependent on age, sometimes occurring in a group of B6 mice at a particular age and sometimes not occurring in a separate group of the same age. - -Anesthesia protocol avoids IOP alteration and allows detection of diurnal differences - -All IOPs were assessed using an anesthetic regime of 99 mg/kg ketamine and 9 mg/kg xylazine (defined as 1X). Initial experiments suggested that an almost identical dose (100 mg/kg ketamine and 9 mg/kg xylazine) of anesthesia had no effect on IOP during the experimental period with IOP being measured as soon as possible after the mouse was unconscious, typically minutes. [13]. To further assess the effects of anesthesia, we measured IOP in groups of genetically identical B6 mice subjected to different doses (1X, 1.5X and 2X) at 5 and 25 minutes after administration (Figure 5). For all doses, IOP decreased by 25 minutes (P = 0.005 for time). The greater the dose the greater the decrease in IOP. At the 5 minute measurement, however, IOP was the same using all doses suggesting that the anesthetic effect on IOP had not yet occurred. To identify any early window when it may be possible to assess IOP without an obvious anesthetic effect, 195 mice of strain B6 were anesthetized with the 1X dose and IOP was measured at 1 minute time points between 4 and 12 minutes after administration (Figure 5). The mean IOP of groups analyzed at each time point did not differ (P = 0.9) indicating that the IOP depressing effect of anesthesia occurs later than 12 minutes after administration. Similar results were obtained using 161 strain 129P3/J and 145 strain DBA/2J mice with the 1X dose (129P3/J, P = 0.1; DBA/2J, P = 0.2). In support of a later effect of anesthesia (since general anesthesia is reported to mask diurnal variation in IOP [21]), we identified increased IOP during the dark compared to the light period of the day in several tested strains (Figure 6). In these experiments, IOP measurements were made between 5 and 12 minutes after administration of anesthesia. - -Figure 5 - -No effect of 1X anesthetic dose within 12 minutes of administration. A Mean IOP ± SD is shown for C57BL/6J mice at 5 and 25 minutes after administration of various doses of anesthetic. The 1X dose consisted of 99 mg/kg ketamine and 9 mg/kg xylazine. All doses decreased IOP by 25 minutes. At all doses the IOP at 5 minutes was the same suggesting that the effect of anesthesia had not yet occurred. Approximately thirty 3 to 4 month old mice were analyzed at each dose and time B-D. Scatter-plots demonstrating no change in IOP over the 12 minutes following anesthetic administration in three relatively unrelated mouse strains. All strains consisted of males and females that ranged from 3 to 6 months of age. The sexes and ages were equally represented at each time point. The scatter-plots include 195 C57BL/6J, 161 129P3/J and 145 DBA/2J mice. - -Figure 6 - -IOP is increased during the dark compared to light periods in several strains. Mean IOP ± SEM is shown for the indicated strains at measurement during the light (open bars) or dark (filled bars) periods of the day. All mice were 2 to 4 months old except for CBA/CaJ that were 5 to 6 months old. 129B6 refers to mice of a mixed 129X1/SvJ and C57BL/6J background. IOP was increased during the dark in all strains except CBA/CaJ. The number of mice successfully analyzed during the light (L) or dark (D) periods follows, DBA/2J 10L,10D; C57BL/6J 32L, 22D; C57BR/cdJ 12L,10D; SWR/J 16L, 16D; BALB/cByJ 15L, 16D; 129B6 10L, 12D; CBA/CaJ 22L, 16D. - -Blood pressure does not correlate with IOP - -An initial study of the relationship between blood pressure and IOP in mice did not detect a good correlation (R2 = 0.1, Figure 7). - -Figure 7 - -No correlation between blood pressure and IOP. There is no strong correlation between the average systolic blood pressure of each strain and the average IOP of that strain (R2 = 0.1). All mice were female and 2 to 4 months old, with the exception that the female CBA/CaJ used for IOP assessment were 6 to 7 months old. If the CBA/CaJ mice are excluded, R2 drops to 0.01 of ARK/J, C57BL/6J and SJL/J, strain ARK/J had the lowest IOP. - -Myoc alleles do not associate with the magnitude of IOP - -Mutations in the myocilin gene (MYOC) cause human glaucoma. To determine if allelic variation in the mouse Myoc gene associated with IOP in mouse strains, we analyzed the gene in an assortment of strains with different IOPs. Two alleles were identified. One of these alleles had a 12 nucleotide insertion in the promoter region (ccagagcagggt, between positions -340 and -341) compared to the previously published sequence and is called the insertion allele. The other allele was identical to the published sequence [22]. The insertion allele also had a previously reported substitution (A to G, Thr164Ala) in exon 1 and several other single base changes in the promoter region [22]. The presence or absence of this allele does not associate with IOP as it is present in strains with a range of IOPs (Figure 8). - -Figure 8 - -Myoc alleles do not associate with IOP. Sequencing identified two alleles of Myoc in these mouse strains (see text). Mouse strains homozygous for an allele having a 12 bp insertion in the promoter region are shown as open bars and strains homozygous for the allele without this insertion have filled bars. The IOP data is the same as that in Figure 1. - -Genetic alterations and IOP - -Y Chromosome - -The Y chromosome has been implicated in strain specific blood pressure differences in rats [23,24]. To test if the Y chromosome of strain 129/Ola alters IOP in relation to that of strain B6, we compared the IOPs of pure B6 males and consomic B6 males that had the 129P2/Ola Y chromosome (backcrossed for 11 generations). No differences in IOP were detected between these groups of mice (Figure 9, P = 0.1). - -Figure 9 - -Effects of genetic alterations. Mean IOP ± SEM is shown. There is no difference in IOP between 3 to 4 month old males with either the 129P2/Ola (n = 18) or C57BL/6J (n = 20) Y chromosome (Y Chr). The 129 Y Chr had been backcrossed to strain C57BL/6J for 11 generations. Similarly, 6 to 9 month old males and females that are homozygous for normal (+) or mutant (n) alleles of Car2 have similar IOPs (n = 18 and 14, respectively). However, 4 months old males homozygous for the Lepr diabetes and obesity causing mutation (db) had significantly higher IOPs than their heterozygous age and sex matched littermates. The average body weight of the homozygotes and heterozygotes was 59 g (range 50 to 64 g) and 35 g (range 28 to 41 g) respectively. Blood sugar levels in db /db males of this age are almost always in the diabetic range whereas those of heterozygotes are not [[27]]. This was recently confirmed in cohorts of approximately 25 males of each genotype (mean ± SD; db/db 422 ± 110 mg/dl ; db/+ 147 ± 19 mg/dl; Anthony Nicholson, The Jackson Laboratory, personal communication) - -Car2 - -To test if deficiency of carbonic anhydrase II leads to decreased IOP, we analyzed mice of a B6 background that were genetically similar but with normal or mutant alleles of the Car2 gene [25,26]. There was no difference in IOP between normal and mutant mice (Figure 9, P = 0.5). - -Lepr - -To test if genetic perturbations that cause obesity and diabetes can alter IOP, we compared mice that were genetically similar but were either homozygous or heterozygous for a leptin receptor mutation (db) that results in obesity and diabetes before 4 months of age on the C57BLKS/J strain background used [27]. IOP was modestly but significantly elevated in obese, diabetic homozygous mutants (14.7 ± 0.3 mmHg) compared to non-obese, non-diabetic heterozygotes (13.4 ± 0.4 mmHg, P < 0.01, Figure 9). - -Tyr - -To determine if albinism alters IOP, we analyzed B6 mice that were either pigmented or albino. The albino mice were homozygous and coisogenic for a mutant allele of tyrosinase (Tyrc-2J) that arose on the otherwise pigmented B6 background. In 2 month old mice, homozygosity for Tyrc-2J resulted in increased IOP (14.2 ± 0.4 mmHg) compared to wild type, pigmented mice (12.4 ± 0.3 mmHg, P < 0.0001). The same was true for independent cohorts of mice of different ages that were analyzed at different times (Figure 10A). In contrast to pigmented B6 mice (Figure 6), the IOPs of the albino B6 mice were not increased at measurement during the dark compared to light period of the day (P = 0.6, Figure 10B). - -Figure 10 - -Tyr mutation results in increased IOP and altered diurnal changes A. Different cohorts of C57BL/6J mice that are homozygous for the spontaneous Tyrc-2J mutation have higher IOP than their normal counterparts at all tested ages. All groups consisted of male and female mice. B. IOP is not increased during the dark period of the day in Tyrc-2J homozygotes. The number of mice analyzed during the light period were: 2 month, 28 +/+, 29 c-2J/c-2J, 4 month, 20 +/+ and 20 c-2J/c-2J, 8 month, 15 +/+ and 15 c-2J/c-2J. Fourteen mice of each genotype were successfully analyzed during the dark period of the day. - -Discussion - -IOP differences are reproducible and amenable to genetic analyses - -We report the IOPs of over 30 genetically different mouse strains that were housed in the same environmental conditions. The magnitude of IOP differences between strains and the good reproducibility of readings over time will allow the use of genetic approaches to identify genes that underlie these differences. Using our method, a trained investigator can measure the IOPs of 10 mice in an hour. Thus it is feasible to assess sufficient numbers of mice for quantitative trait locus (QTL) analysis methods and to use these methods to identify chromosomal regions contributing to strain differences in IOP. The strain survey we report provides valuable information for designing these experiments. The throughput and reproducibility also is sufficient for mutagenesis screens [28-30]. These are important approaches as they may allow the association of genes with IOP and glaucoma whose currently known functions do not suggest that they affect aqueous humor dynamics or do not immediately identify them as likely glaucoma candidates. - -No effect of anesthetic protocol on IOP during a 12 minute measurement window - -Many anesthetic agents including xylazine lower IOP. Ketamine usually appears to increase IOP [31-33], but there are reports of ketamine having no effect on IOP or even reducing IOP [31,34]. Different doses, species used, routes of administration or environments may contribute to these differences. The relationship between the IOPs we measure and those in conscious mice depends upon the effect of our anesthetic protocol (intraperitoneal injection of 99 mg/kg ketamine and 9 mg/kg xylazine). An anesthetic effect could potentially alter IOP and mask genetically determined differences in IOP. Therefore, it is very important to understand this effect. Here, we show that, despite a depressant effect on IOP by 25 minutes, our anesthetic protocol has no detectable effect on IOP during the first 12 minutes after administration. Thus, to avoid effects of anesthesia on IOP, all measurements should be made within a window of up to 12 minutes after anesthetic administration. - -Similarities and differences to rat studies - -Our results agree with the time course of cardiovascular depression caused by intraperitoneal administration of ketamine and xylazine in rats. In that study, anesthesia had a minor effect on blood pressure during the first 15 minutes following injection but a strong hypotensive effect between 15 and 30 minutes that continued for more than an hour [35]. In contrast, intraperitoneally administered ketamine (100 mg/kg) was shown to rapidly decrease IOP in a different rat study [36]. IOP decreased significantly between a conscious measurement and the first possible measurement under anesthesia (defined as time 0). IOP decreased further by the next reading (at 5 minutes) after which it remained stable for the duration of the experiment (20 minutes)[36]. The time 0 measurement in that study was at a very similar state of anesthesia as our 4 and 5 minute time points (starting as soon as possible and within 20 to 60 seconds of adequate anesthesia), and the 5 minute rat time point was similar to our 9 and 10 minute measurement times. Thus, although both rat and mouse studies show that anesthesia decreases IOP, the studies do not agree on the timing of the effect. The IOP depression occurred very soon after anesthesia in the rats but was delayed in the mice. - -Environment may influence the effect of anesthesia - -Factors that may influence the effect of anesthesia include the species, strain and environment used. Essentially the same dose of ketamine and route of administration was used in both the rat and mouse IOP studies. In mice, the strain does not appear to be important as no early effect of anesthesia was present in the three distantly related laboratory strains [37] we studied in detail, and we have not observed any obvious effect during this period in any analyzed strain. Environmental differences may be important. Cage cleanliness, changing frequency and housing density can alter drug metabolism and the effect of anesthesia in rats [38,39]. The type of bedding used also may be important. We use wood shavings for bedding and wood shavings expose the mice to terpenes. Terpene administration or environmental exposure to terpenes in wood shavings alters drug resistance and decreases the effect of anesthetic agents in both rats and mice [40-45]. - -Risk factors for increased IOP - -Some epidemiological studies implicate factors such as diabetes, vascular hypertension, arterial hypotension, vasospasm, aberrant autoregulation of blood flow and sex in glaucoma. Other studies find no association between these factors and glaucoma [2,46-48]. Similarly, the effects of various factors including age, gender, blood pressure, obesity and diabetes have been variably associated with elevated IOP. We evaluated the relationship between these latter factors and IOP in genetically homogeneous mouse strains in a controlled environment. - -Age - -Although within the range of variability observed in young mice, the IOP of B6 mice modestly decreased around 1 year of age. This decrease was statistically significant compared to young mice measured at the same time. At 2 years of age the IOP of B6 mice had decreased further, though an effect of anesthesia in these very old mice cannot be ruled out [49]. The IOP of 129P3/J mice also decreased with age but only at the oldest age examined (18 months). Decreasing IOP correlates with increasing age in the human Japanese population [50,51]. Further studies of B6 mice may allow experimental investigation of this effect. Additional studies may also identify " normal" mouse strains that develop increased IOP with age as generally occurs in Western populations [52,53]. We previously demonstrated that the glaucomatous strains DBA/2J and AKXD-28/Ty develop elevated IOP with age [14,19]. - -Gender - -In the examined strains, we found no consistent differences in IOP between males and females. This was true at all ages for the 3 strains that were aged to 18 months or older. This is in agreement with a number of human studies, which show that IOP is equal between the sexes [52,53]. However, some studies have found sex-specific differences (typically with higher IOP in females and the magnitude of the difference increasing after 40 years of age) [53,54]. Of possible relevance, we previously reported that female mice of strains DBA/2J and AKXD-28/Ty develop elevated IOP at an earlier age than males [14,19]. - -Blood pressure - -Some but not all human studies have reported a positive association between IOP and blood pressure [48,52]. Our comparison of the relationship between blood pressure and IOP in young, adult female mice of different mouse strains, whose blood pressures differed up to 36 mmHg, did not reveal a positive correlation. Further studies are needed to determine if blood pressure correlates with IOP in males, and to determine the relationship between blood pressure and IOP in various mouse strains with age. - -Obesity and diabetes - -Obesity or higher body mass index have been implicated by some but not other studies as risk factors for increased IOP and glaucoma [51,55-57]. Similarly, diabetes or the combination of diabetes and obesity have been variably associated with elevated IOP and glaucoma [46,52,58-62]. To test if genetic perturbations that cause obesity and diabetes can alter IOP, we compared groups of mice that were genetically similar except that they were either homozygous or heterozygous for a leptin receptor mutation (db) that results in early onset obesity and diabetes. The obese, diabetic mice had higher IOPs than their lean, non-diabetic littermates. Thus, epidemiological associations between increased IOP and obesity or diabetes are supported by this work and appear to be functionally relevant. Further experiments with obese non-diabetic or diabetic non-obese mice will help to characterize the separate effects of these risk factors. - -IOP is increased during the dark period of the day - -Diurnal variation in IOP is common in humans and laboratory animals [53]. The molecular mechanisms underlying the diurnal rhythm are not defined but increased aqueous humor production or flow occurs during the period of increased IOP in both rabbits and humans [63-65]. Small changes in the resistance to aqueous humor drainage may also contribute to diurnal differences in IOP [66,67]. We first suspected IOP changes with time of day when the IOP of a group of B6 mice measured in the hour prior to onset of the dark period appeared to be higher than at other times of day. Previously, a rise of IOP was reported to occur before onset of the dark period in rats [21], and rats and rabbits were shown to have higher IOP during the dark period compared to the light period [21,68,69]. Thus, we compared the IOPs of mice at different times of day and identified several strains with significantly higher IOP during the dark compared to the light period. The magnitude of the difference varies with strain, and was greatest in SWR/J. The IOP increase in the dark is not dependent on functional rod and cone photoreceptors since these cells degenerate in SWR/J mice due to homozygosity for the Pde6brd1 mutation. In agreement with this finding, circadian regulation of wheel running by light was previously reported in mice lacking rods and cones [70]. Interestingly, the IOP of strain CBA/CaJ, which has one of the highest daytime IOPs does not appear to increase in the dark. Further more detailed studies are needed to define the characteristics of the diurnal rhythm of intraocular pressure in mice, and to determine whether it is lacking or has a different timing in strain CBA/CaJ. Analysis of these mouse strains may increase understanding of the molecular mechanisms controlling diurnal rhythms of IOP and that may be relevant to glaucoma. - -Car2 deficiency does not alter IOP - -Bicarbonate formation is important for aqueous humor secretion from the ciliary processes and carbonic anhydrase (CA) facilitates this secretion. There are multiple forms of CA and the CAII isoform is reported to be the predominant form in the ciliary processes [71,72]. Our experiments show that a genetic deficiency of CAII in mice homozygous for a mutation in the Car2 gene does not alter IOP. CAIV activity was recently demonstrated in the ciliary processes [73] and so our data may support a more substantial role for CAIV compared to CAII in aqueous humor secretion. It also is possible that CAII substantially contributes to aqueous humor secretion but that functional mouse CAIV is sufficient to prevent an effect of CAII deficiency on IOP in Car2 mutant mice. In support of a role for both enzymes, a greater than 90% inhibition of CA is required for significant reduction of aqueous secretion [71,72]. - -Tyrosinase deficiency results in increased IOP - -Tyrosinase is the first enzyme of the pigment production pathway. Tyrosinase deficiency causes albinism and has various ocular consequences. These include alteration of the number of ipsilaterally projecting retinal axons and substantially increased light penetration past the iris [74]. It is not known if these abnormalities affect mammalian IOP. Here, we show increased IOP in mice lacking tyrosinase activity compared to otherwise genetically identical pigmented B6 mice. Additionally, IOP differences between the light and dark period of the day were detected in the pigmented but not the albino B6 mice. Thus, albinism can affect the diurnal pattern of IOP changes. In agreement with this result, mice with albino eyes that are homozygous for tyrosinase or pink eye dilution mutations have altered diurnal rhythms compared to pigmented mice [75]. Albinism by itself is either not sufficient to alter the diurnal rhythm of IOP or alters it in different ways depending upon genetic background, however, since the albino strains BALB/cByJ and SWR/J had increased IOP during the dark. Diurnal rhythms are known to depend on visual pathways and to respond to light intensity. Exposing rats to 24 hours of low light abrogates the diurnal fluctuation of IOP and results in constantly elevated IOP [36]. Further experiments will determine the nature of the diurnal rhythm of IOP in the albino B6 mice and if its alteration or other mechanisms result in IOP elevation. - -Conclusions - -A broad range of reproducible IOP differences exists between inbred mouse strains and a diurnal rhythm of IOP exists in different strains. Various factors have been variably associated with risk for increased IOP in humans. Genetically uniform, mice can be used to study the effects of these risk factors on IOP. In trained hands, our measurement procedure is reliable, accurate and rapid enough to allow large scale genetic studies of factors determining IOP. Mice have great potential for helping to characterize the molecular mechanisms affecting IOP. - -Materials and Methods - -Animal husbandry - -All experiments were performed in compliance with the ARVO statement for use of animals in ophthalmic and vision research. All mice were bred and maintained at The Jackson Laboratory. Mice were housed in cages containing white pine bedding and covered with polyester filters. For most experiments, the mice were fed NIH31 (6 % fat) chow ad libitum, and their water was acidified to pH 2.8 to 3.2. B6 mice develop diet induced diabetes when maintained on a high fat diet [76]. To ensure that we were analyzing the effect of age and not diabetes, the B6 mice in the aging experiment were fed NIH31 (4% fat) chow. We have found no differences in IOP between B6 mice housed on the 4% fat and 6% fat versions of this otherwise identical diet. The mice were group housed and the cages were changed one time per week. If any cage appeared soiled between scheduled changes, the mice were placed in a clean cage. The environment was kept at 21°C with a 14 hour light: 10 hour dark cycle. The colony was monitored for specific pathogens by The Jackson Laboratory's routine surveillance program (see for specific pathogens). - -Intraocular pressure - -Intraocular pressures were measured as described elsewhere [13,77]. The mice were typically acclimatized to the procedure room for at least 2 weeks prior to measurement, but sometimes between 1 and 2 weeks. Although it was not possible to include all strains in each measurement period, mice of different strains were intermixed. As demonstrated here, the IOPs of C57BL/6J are very consistent over time and so these animals were interspersed with experimental mice during all experiments to ensure that calibration had not drifted and that the system was functioning optimally. Whenever possible, the investigator measuring IOP did not know the genotypes of the animals. It was not possible to analyze all age groups of each strain at the same time in the aging experiments. Therefore, to control for potential IOP changes due to measurement time and not age, approximately 3 month old B6 mice were assessed at the same time as each age group. All dark period measurements were made between 1 and 3 hours after the lights turned off. The room was equipped with dim red lights and mice were protected from all light exposure during set up. Each mouse was briefly exposed to the red light when the anesthetic agents were administered. When adequate anesthesia was achieved (after 3 to 4 minutes), the mouse was placed on the measurement platform and the white light of the microscope was turned on (for approximately 1 and a half minutes) to allow ocular cannulation, IOP measurement and post-measurement tests [13] that guard against artifactual data. The white light was used at very low intensity and was dim but we cannot rule out the possibility that this brief exposure altered the IOP. All other mice were protected from light exposure throughout the time an individual mouse was analyzed. - -Blood pressure - -The blood pressures of conscious mice of each strain (6 to 12 females per strain) were measured with a tail-cuff system as reported [78], except that 5 days of training were used. The mice were analyzed in the same procedure room as was used for IOP measurment. - -Clinical examinations - -For most strains, anterior chambers were examined with a slit lamp biomicroscope [16]. At least 8 mice of each strain shown in figure 1 were evaluated. However, the anterior chambers of C57BLKS/J mice were only evaluated under a dissection microscope at the time of IOP measurement. - -Histological analysis - -Eyes from at least 2 mice of the listed strains were fixed (4% paraformaldehyde or Fekete's acid-alcohol-formalin fixative) processed, paraffin embedded and sectioned as previously reported [15,79], except that the paraformaldehyde was buffered with 0.1 M phosphate buffer. All strains other than CBA/CaHN and C57BLKS/J strains were evaluated. The eyes of CBA/CaJ and BALB/cJ mice were also fixed and processed for plastic embedding (Historesin, Leica, Heidelberg, Germany), and sectioned as previously reported [14,79]. Saggital sections including the pupil and optic nerve were collected and analyzed as they contain most ocular structures. - -Analysis of Myoc - -Exons and the proximal promoter of the mouse Myoc gene were amplified from mouse genomic DNA using the following combinations of primers: - -Exon 1: 5'-cttgcaggagaactttccagaa-3' and 5'-atctcgaaggagattgttatagg-3' - -5'-gaccagctggagacccaaaccag-3' and 5'-gctcagatccactgacctaaa-3' - -Exon 2: 5'-tgaagccatactttaccaaccat-3' and 5'-caaaagggagaagtctaacttc-3' - -Exon 3: 5'-agtcaaggctcacagagctaa-3' and 5'-aagagtagctgctcaccgtgtacaag-3' - -5'-agacattgacttagctgtggat-3' and 5'-cggaacttcaccttttctggc-3' - -Promoter: 5'-taggagaagtctcattatactgc-3' and 5'-ttcactggaccagcataagga-3' - -5'-tctgaggatgttcacaggtttat-3' and 5'-tcttctggaaagttctcctgca-3' - -Samples underwent 30 cycles of amplification with Perkin-Elmer Taq polymerase in a PTC Thermal Cycler (MJ Research, MA) (94° for 40 sec, 57° for 1 min, 72° for 2 min). The PCR products we purified and sequenced as described [22]. - -Abbreviations - -Intraocular pressure (IOP), C57BL/6J (B6), chromosome (Chr), polymerase chain reaction (PCR), carbonic anhydrase (CA) - -Acknowledgments - +Intraocular pressure in genetically distinct mice: an update and strain survey + +Abstract + +Background + +Little is known about genetic factors affecting intraocular pressure (IOP) in mice and other mammals. The purpose of this study was to determine the IOPs of genetically distinct mouse strains, assess the effects of factors such as age, sex and time of day on IOP in specific strain backgrounds, and to assess the effects of specific candidate gene mutations on IOP. + +Results + +Based on over 30 studied mouse strains, average IOP ranges from approximately 10 to 20 mmHg. Gender does not typically affect IOP and aging results in an IOP decrease in some strains. Most tested strains exhibit a diurnal rhythm with IOP being the highest during the dark period of the day. Homozygosity for a null allele of the carbonic anhydrase II gene (Car2n) does not alter IOP while homozygosity for a mutation in the leptin receptor gene (Leprdb) that causes obesity and diabetes results in increased IOP. Albino C57BL/6J mice homozygous for a tyrosinase mutation (Tyrc-2J) have higher IOPs than their pigmented counterparts. + +Conclusions + +Genetically distinct mouse strains housed in the same environment have a broad range of IOPs. These IOP differences are likely due to interstrain genetic differences that create a powerful resource for studying the regulation of IOP. Age, time of day, obesity and diabetes have effects on mouse IOP similar to those in humans and other species. Mutations in two of the assessed candidate genes (Lepr and Tyr) result in increased IOP. These studies demonstrate that mice are a practical and powerful experimental system to study the genetics of IOP regulation and disease processes that raise IOP to harmful levels. + +Background + +Glaucoma is a leading cause of blindness but its molecular etiology is poorly understood. Glaucoma involves retinal ganglion cell death and optic nerve damage that is often associated with elevated intraocular pressure (IOP) [1-5]. + +It is becoming increasingly clear that many forms of glaucoma have a genetic component [6,7], and much current research is focused on identifying chromosomal regions and genes that contribute to glaucoma [8-10]. Identifying such loci allows screening for individuals with an increased risk of developing glaucoma [11]. Identifying genes contributing to elevated IOP and glaucoma is only the first step, however, and animal models will provide systems for subsequent hypothesis testing and experimental dissection of pathogenesis. + +Due to conservation in mammalian physiology and the powerful tools of mouse genetics, mice are a very important experimental system for probing the functions (both in health and disease) of many genes recently identified by sequencing the human genome [12]. We have focused on developing the mouse system for IOP and glaucoma studies [13-19]. Mice are expected to be extremely helpful in characterizing genes and mechanisms that affect IOP or the susceptibility of the optic nerve and retina to glaucomatous damage [20]. + +Very little is known about the magnitude of IOP of various mouse strains or IOP fluctuation in mice with time or other factors. Previously, we developed a method to measure IOP in mice and reported initial findings on the magnitude of mouse IOP [13]. The procedure involves direct measurement of pressure following cannulation of the anterior chamber. The initial experiments demonstrated that in our hands careful ocular cannulation has a very minor effect on IOP (average of -0.3 mmHg, mode -0.5 mmHg) and demonstrated significant differences in intraocular pressure levels between four mouse strains. Here, we provide an update, including an extensive strain survey, and show that the methodology is reliable and produces reproducible data over extended periods of time. + +Results + +A broad range of IOPs between strains + +Figure 1 shows the average IOP of a number of inbred mouse strains that were housed in the same environmental conditions. There is a wide range of IOP with strain BALB/cJ having one of the lowest average IOPs (11.1 ± 0.5 mmHg) and strain CBA/CaJ one of the highest IOPs (19.3 ± 0.3 mmHg). Significant differences exist among various strains (P < 0.0001 for all groups, ANOVA comparing strains within each sex group). + +Figure 1 + +An almost two-fold range of IOP between genetically distinct mouse strains. Mean IOP ± SEM is shown for each strain. Twelve to 25 mice were analyzed for each strain (typically 18 to 20), except for RIIIS/J (7 mice). Mice of most strains were 6 to 12 months old, except for SEC/1ReJ and SB/Le that were 2 to 3 months old. Approximately half of the CE/J and one third of the BUB/BnJ mice were 16 months old and were pooled with the younger mice, as the IOPs of both ages were the same. Strain name CBA/CaHN-Btkxid/J is abbreviated to CBA/CaHN. + +Clinical and histological analysis of the eyes of all studied strains (see Table 1) did not identify anatomic or pathologic features that might account for the differences in IOP. For example, the iridocorneal angle and aqueous humor drainage structures are open to the anterior chamber and have normal morphology in both BALB/cJ and CBA/CaJ mice (Figure 2). More than 20% of CBA/CaJ mice had IOPs of over 21 mmHg, which increases risk for glaucoma in humans. We aged a small group of these mice (n = 4) to 2 years and histologically analyzed their optic nerves and retinas but they did not develop glaucoma. + +Figure 2 + +Normal iridocorneal angles in strains with high and low IOP. The iridocorneal angle that contains the aqueous humor drainage structures (Schlemm's canal (SC) and trabecular meshwork (TM) had a normal morphology in strains CBA/CaJ (A, high IOP), BALB/cJ (B, low IOP) and all other strains. Pigment filled macrophages that resemble human clump cells were often located in the angle of CBA/CaJ mice but were never sufficient to block drainage. We have observed similar quantities of these cells at this location in other strains with lower IOP. The angle recess between the cornea (C) and iris root (I) was open and not occluded. Aqueous humor passes through this recess before entering the drainage structures. Original Magnification 630X. + +Table 1 + +Ocular abnormalities in various strains + +All strains shown in Figure 1 were evaluated but only strains with abnormalities are shown. For incidence, the numerator indicates the number of mice or eyes affected and the denominator indicates the total number analyzed. The mice were 6 to 12 months old at the time of analysis and were not studied at other ages unless indicated. Histological analysis confirmed these observations and also identified calcified cyst like structures in the iris epithelium of strains SB/Le and SEC/1ReJ. A low incidence of corneal scarring was noted in some strains and likely resulted from a scratched cornea. Previously described retinal degeneration [[81]] caused by homozygosity for the Pde6brd1mutation was noted in strains SB/Le, ST/bJ, BUB/BnJ, CBA/J, C3H/HeJ, SJL/J and SWR/J. + +Strain differences are reproducible + +To assess the consistency of IOP in specific strains, we measured IOP in different cohorts of each strain maintained under similar conditions at different times. We purposefully included strains at each end of the IOP spectrum, and strain C57BL/6J (B6) that is commonly used for genetic experiments (Figure 3). The average IOP of different cohorts of strains CBA/CaJ, CBA/CaHN (both high end of spectrum) and B6 were consistent over time. This was true of most strains assessed on multiple occasions. Average IOP for age matched mice of the same strain assessed at different times typically differed by no more than 1.5 mmHg, and the differences were usually smaller. Strain 129P3/J was the most variable strain with the average IOP fluctuating by up to 2.5 mmHg. + +Figure 3 + +The IOPs of different strains are stable and reproducible over time. Mean IOP ± SEM is shown for the indicated strain at different times of measurement. The measurement times within a single year were separated by a few months. The IOPs of strains that were analyzed multiple times in the same year are listed in the chronological order that they were obtained with the earliest measurement on left. The sex [Male (M) or Female (F)], age (months), and number of mice (n) analyzed for the CBA strains are listed starting with the earliest measurement and ending with the latest: CBA/CaJ, F, n = 22, age 6–7; M, n = 11, age 2; CBA/CaHN, F, n = 16, age 3; M, n = 8, age 3. For BALB/cJ and C57BL/6J, all groups were male and primarily 3 to 4 months old. The number of mice analyzed at each time follows: BALB/cJ 8, 10, 11, 15, 18 and 14, C57BL/6J 10, 14, 21,40,40 and 42. Strain name CBA/CaHN-Btkxid/J is abbreviated to CBA/CaHN. + +Despite the general consistency of IOP, the average IOPs of some strains have changed in a reproducible manner. The IOPs of BALB/cJ mice (low end of spectrum) were very similar for the past several years, around 11 mmHg. Between early 1996 and 1997, however, the IOP of this strain did jump from approximately 7.7 mmHg to approximately 11 mmHg (Figure 3). During this period, the room in which our animals were housed and the manufacturer of the mouse diet were changed. Over the same period, the IOP of A/J also increased dramatically, from 9.4 ± 0.5 mmHg (n = 11) in 1996 to 14.2 ± 0.4 mmHg (n = 19) in 1997. The increased IOP in A/J also was reproducible, with the average IOP of mice assessed in the year 2000 being 14.5 ± 0.4 mmHg (n = 16). Importantly, the IOPs of strains B6 and C3H/HeJ did not change during this time (B6, 12.3. ± 0.5 mmHg in 1996 and 12.4 ± 0.3 mmHg in 1997, n= 10 and 14; C3H/HeJ, 13.7 ± 0.8 mmHg in 1996 and 13.6 ± 0.2 mmHg in 1997, n = 9 and 19). + +Effect of age on IOP + +We focused on the commonly used B6, 129P3/J and C3H/HeJ strains to determine the effects of age on IOP (Figure 4). In B6, age had a significant effect on IOP (P < 0.001). IOP was slightly decreased at both 12 months (12.2 ± 0.2 mmHg) and 19 months (12.2 ± 0.3 mmHg) compared to 3 months (13.1 ± 0.3 mmHg) and 7 months (13.3 ± 0.3 mmHg). Although the decrease was of a similar level to the variation observed in 3 month old mice (see Figure 3), the IOPs of control young mice (see Methods) analyzed at the same times as the various B6 age groups did not decrease. For example, control mice analyzed at the same time as the 3 month, 12 month and 18 month B6 age groups had IOPs of 13.0 ± 0.2 mmHg (n = 14), 13.3 ± 0.2 mmHg (n = 14), 13.7 ± 0.4 mmHg (n = 12), respectively. IOP was even lower in the 24 month B6 mice (10.8 ± 0.4 mmHg), and again the average IOP of young controls measured at the same time was not changed (13.5 ± 0.2, n = 12). + +Figure 4 + +IOP changes with increasing Age. Mean IOP ± SEM is shown for the indicated strain at different ages. IOP decreased significantly in strains C57BL/6J and 129P3/J but not C3H/HeJ. The C57BL/6J and 129P3/J groups consisted of approximately equal numbers of males and females. The 3 months old C3H/HeJ mice were male while the other ages were composed of males and females. The number of mice analyzed at each age, listed from youngest to oldest, follow: C57BL/6J, 18, 18, 18, 18, 13; 129P3/J, 18, 15, 16, 14, 21; C3H/HeJ, 15, 23 17 and 16. + +In strain 129P3/J, IOP did not differ significantly with age between 3 and 14 months but was lower in 18 month old mice (P < 0.001 compared to all younger ages, Figure 4). Despite a 1 mmHg dip in IOP at 8 months, there were no significant IOP differences between C3H/HeJ mice at each age tested (P = 0.2 for age). Although the effect of age has not been thoroughly assessed in other strains, no obvious age-related differences have been identified in other strains analyzed at multiple ages except for the glaucomatous DBA/2J and AKXD-28/Ty strains [14,19]. + +Effect of sex on IOP + +Although we have not rigorously assessed the effect of sex on IOP in many strains, sex specific differences have not been detected in the majority of strains for which both sexes have been analyzed, and have proven inconsistent even within an individual strain analyzed multiple times. Strains B6 and 129P3/J have been extensively evaluated at multiple ages between 3 and 24 months of age. Sex differences were always absent in strain 129P3/J and typically absent in strain B6. In strain B6, however, males infrequently had significantly higher IOP than females. For example, in one experiment, B6 males had an average IOP of 14.2 ± 0.3 mmHg (n = 12) whereas the average IOP of females was 13.1 ± 0.3 mmHg (n = 12, P = 0.01). If real, this sporadic sex difference was not dependent on age, sometimes occurring in a group of B6 mice at a particular age and sometimes not occurring in a separate group of the same age. + +Anesthesia protocol avoids IOP alteration and allows detection of diurnal differences + +All IOPs were assessed using an anesthetic regime of 99 mg/kg ketamine and 9 mg/kg xylazine (defined as 1X). Initial experiments suggested that an almost identical dose (100 mg/kg ketamine and 9 mg/kg xylazine) of anesthesia had no effect on IOP during the experimental period with IOP being measured as soon as possible after the mouse was unconscious, typically minutes. [13]. To further assess the effects of anesthesia, we measured IOP in groups of genetically identical B6 mice subjected to different doses (1X, 1.5X and 2X) at 5 and 25 minutes after administration (Figure 5). For all doses, IOP decreased by 25 minutes (P = 0.005 for time). The greater the dose the greater the decrease in IOP. At the 5 minute measurement, however, IOP was the same using all doses suggesting that the anesthetic effect on IOP had not yet occurred. To identify any early window when it may be possible to assess IOP without an obvious anesthetic effect, 195 mice of strain B6 were anesthetized with the 1X dose and IOP was measured at 1 minute time points between 4 and 12 minutes after administration (Figure 5). The mean IOP of groups analyzed at each time point did not differ (P = 0.9) indicating that the IOP depressing effect of anesthesia occurs later than 12 minutes after administration. Similar results were obtained using 161 strain 129P3/J and 145 strain DBA/2J mice with the 1X dose (129P3/J, P = 0.1; DBA/2J, P = 0.2). In support of a later effect of anesthesia (since general anesthesia is reported to mask diurnal variation in IOP [21]), we identified increased IOP during the dark compared to the light period of the day in several tested strains (Figure 6). In these experiments, IOP measurements were made between 5 and 12 minutes after administration of anesthesia. + +Figure 5 + +No effect of 1X anesthetic dose within 12 minutes of administration. A Mean IOP ± SD is shown for C57BL/6J mice at 5 and 25 minutes after administration of various doses of anesthetic. The 1X dose consisted of 99 mg/kg ketamine and 9 mg/kg xylazine. All doses decreased IOP by 25 minutes. At all doses the IOP at 5 minutes was the same suggesting that the effect of anesthesia had not yet occurred. Approximately thirty 3 to 4 month old mice were analyzed at each dose and time B-D. Scatter-plots demonstrating no change in IOP over the 12 minutes following anesthetic administration in three relatively unrelated mouse strains. All strains consisted of males and females that ranged from 3 to 6 months of age. The sexes and ages were equally represented at each time point. The scatter-plots include 195 C57BL/6J, 161 129P3/J and 145 DBA/2J mice. + +Figure 6 + +IOP is increased during the dark compared to light periods in several strains. Mean IOP ± SEM is shown for the indicated strains at measurement during the light (open bars) or dark (filled bars) periods of the day. All mice were 2 to 4 months old except for CBA/CaJ that were 5 to 6 months old. 129B6 refers to mice of a mixed 129X1/SvJ and C57BL/6J background. IOP was increased during the dark in all strains except CBA/CaJ. The number of mice successfully analyzed during the light (L) or dark (D) periods follows, DBA/2J 10L,10D; C57BL/6J 32L, 22D; C57BR/cdJ 12L,10D; SWR/J 16L, 16D; BALB/cByJ 15L, 16D; 129B6 10L, 12D; CBA/CaJ 22L, 16D. + +Blood pressure does not correlate with IOP + +An initial study of the relationship between blood pressure and IOP in mice did not detect a good correlation (R2 = 0.1, Figure 7). + +Figure 7 + +No correlation between blood pressure and IOP. There is no strong correlation between the average systolic blood pressure of each strain and the average IOP of that strain (R2 = 0.1). All mice were female and 2 to 4 months old, with the exception that the female CBA/CaJ used for IOP assessment were 6 to 7 months old. If the CBA/CaJ mice are excluded, R2 drops to 0.01 of ARK/J, C57BL/6J and SJL/J, strain ARK/J had the lowest IOP. + +Myoc alleles do not associate with the magnitude of IOP + +Mutations in the myocilin gene (MYOC) cause human glaucoma. To determine if allelic variation in the mouse Myoc gene associated with IOP in mouse strains, we analyzed the gene in an assortment of strains with different IOPs. Two alleles were identified. One of these alleles had a 12 nucleotide insertion in the promoter region (ccagagcagggt, between positions -340 and -341) compared to the previously published sequence and is called the insertion allele. The other allele was identical to the published sequence [22]. The insertion allele also had a previously reported substitution (A to G, Thr164Ala) in exon 1 and several other single base changes in the promoter region [22]. The presence or absence of this allele does not associate with IOP as it is present in strains with a range of IOPs (Figure 8). + +Figure 8 + +Myoc alleles do not associate with IOP. Sequencing identified two alleles of Myoc in these mouse strains (see text). Mouse strains homozygous for an allele having a 12 bp insertion in the promoter region are shown as open bars and strains homozygous for the allele without this insertion have filled bars. The IOP data is the same as that in Figure 1. + +Genetic alterations and IOP + +Y Chromosome + +The Y chromosome has been implicated in strain specific blood pressure differences in rats [23,24]. To test if the Y chromosome of strain 129/Ola alters IOP in relation to that of strain B6, we compared the IOPs of pure B6 males and consomic B6 males that had the 129P2/Ola Y chromosome (backcrossed for 11 generations). No differences in IOP were detected between these groups of mice (Figure 9, P = 0.1). + +Figure 9 + +Effects of genetic alterations. Mean IOP ± SEM is shown. There is no difference in IOP between 3 to 4 month old males with either the 129P2/Ola (n = 18) or C57BL/6J (n = 20) Y chromosome (Y Chr). The 129 Y Chr had been backcrossed to strain C57BL/6J for 11 generations. Similarly, 6 to 9 month old males and females that are homozygous for normal (+) or mutant (n) alleles of Car2 have similar IOPs (n = 18 and 14, respectively). However, 4 months old males homozygous for the Lepr diabetes and obesity causing mutation (db) had significantly higher IOPs than their heterozygous age and sex matched littermates. The average body weight of the homozygotes and heterozygotes was 59 g (range 50 to 64 g) and 35 g (range 28 to 41 g) respectively. Blood sugar levels in db /db males of this age are almost always in the diabetic range whereas those of heterozygotes are not [[27]]. This was recently confirmed in cohorts of approximately 25 males of each genotype (mean ± SD; db/db 422 ± 110 mg/dl ; db/+ 147 ± 19 mg/dl; Anthony Nicholson, The Jackson Laboratory, personal communication) + +Car2 + +To test if deficiency of carbonic anhydrase II leads to decreased IOP, we analyzed mice of a B6 background that were genetically similar but with normal or mutant alleles of the Car2 gene [25,26]. There was no difference in IOP between normal and mutant mice (Figure 9, P = 0.5). + +Lepr + +To test if genetic perturbations that cause obesity and diabetes can alter IOP, we compared mice that were genetically similar but were either homozygous or heterozygous for a leptin receptor mutation (db) that results in obesity and diabetes before 4 months of age on the C57BLKS/J strain background used [27]. IOP was modestly but significantly elevated in obese, diabetic homozygous mutants (14.7 ± 0.3 mmHg) compared to non-obese, non-diabetic heterozygotes (13.4 ± 0.4 mmHg, P < 0.01, Figure 9). + +Tyr + +To determine if albinism alters IOP, we analyzed B6 mice that were either pigmented or albino. The albino mice were homozygous and coisogenic for a mutant allele of tyrosinase (Tyrc-2J) that arose on the otherwise pigmented B6 background. In 2 month old mice, homozygosity for Tyrc-2J resulted in increased IOP (14.2 ± 0.4 mmHg) compared to wild type, pigmented mice (12.4 ± 0.3 mmHg, P < 0.0001). The same was true for independent cohorts of mice of different ages that were analyzed at different times (Figure 10A). In contrast to pigmented B6 mice (Figure 6), the IOPs of the albino B6 mice were not increased at measurement during the dark compared to light period of the day (P = 0.6, Figure 10B). + +Figure 10 + +Tyr mutation results in increased IOP and altered diurnal changes A. Different cohorts of C57BL/6J mice that are homozygous for the spontaneous Tyrc-2J mutation have higher IOP than their normal counterparts at all tested ages. All groups consisted of male and female mice. B. IOP is not increased during the dark period of the day in Tyrc-2J homozygotes. The number of mice analyzed during the light period were: 2 month, 28 +/+, 29 c-2J/c-2J, 4 month, 20 +/+ and 20 c-2J/c-2J, 8 month, 15 +/+ and 15 c-2J/c-2J. Fourteen mice of each genotype were successfully analyzed during the dark period of the day. + +Discussion + +IOP differences are reproducible and amenable to genetic analyses + +We report the IOPs of over 30 genetically different mouse strains that were housed in the same environmental conditions. The magnitude of IOP differences between strains and the good reproducibility of readings over time will allow the use of genetic approaches to identify genes that underlie these differences. Using our method, a trained investigator can measure the IOPs of 10 mice in an hour. Thus it is feasible to assess sufficient numbers of mice for quantitative trait locus (QTL) analysis methods and to use these methods to identify chromosomal regions contributing to strain differences in IOP. The strain survey we report provides valuable information for designing these experiments. The throughput and reproducibility also is sufficient for mutagenesis screens [28-30]. These are important approaches as they may allow the association of genes with IOP and glaucoma whose currently known functions do not suggest that they affect aqueous humor dynamics or do not immediately identify them as likely glaucoma candidates. + +No effect of anesthetic protocol on IOP during a 12 minute measurement window + +Many anesthetic agents including xylazine lower IOP. Ketamine usually appears to increase IOP [31-33], but there are reports of ketamine having no effect on IOP or even reducing IOP [31,34]. Different doses, species used, routes of administration or environments may contribute to these differences. The relationship between the IOPs we measure and those in conscious mice depends upon the effect of our anesthetic protocol (intraperitoneal injection of 99 mg/kg ketamine and 9 mg/kg xylazine). An anesthetic effect could potentially alter IOP and mask genetically determined differences in IOP. Therefore, it is very important to understand this effect. Here, we show that, despite a depressant effect on IOP by 25 minutes, our anesthetic protocol has no detectable effect on IOP during the first 12 minutes after administration. Thus, to avoid effects of anesthesia on IOP, all measurements should be made within a window of up to 12 minutes after anesthetic administration. + +Similarities and differences to rat studies + +Our results agree with the time course of cardiovascular depression caused by intraperitoneal administration of ketamine and xylazine in rats. In that study, anesthesia had a minor effect on blood pressure during the first 15 minutes following injection but a strong hypotensive effect between 15 and 30 minutes that continued for more than an hour [35]. In contrast, intraperitoneally administered ketamine (100 mg/kg) was shown to rapidly decrease IOP in a different rat study [36]. IOP decreased significantly between a conscious measurement and the first possible measurement under anesthesia (defined as time 0). IOP decreased further by the next reading (at 5 minutes) after which it remained stable for the duration of the experiment (20 minutes)[36]. The time 0 measurement in that study was at a very similar state of anesthesia as our 4 and 5 minute time points (starting as soon as possible and within 20 to 60 seconds of adequate anesthesia), and the 5 minute rat time point was similar to our 9 and 10 minute measurement times. Thus, although both rat and mouse studies show that anesthesia decreases IOP, the studies do not agree on the timing of the effect. The IOP depression occurred very soon after anesthesia in the rats but was delayed in the mice. + +Environment may influence the effect of anesthesia + +Factors that may influence the effect of anesthesia include the species, strain and environment used. Essentially the same dose of ketamine and route of administration was used in both the rat and mouse IOP studies. In mice, the strain does not appear to be important as no early effect of anesthesia was present in the three distantly related laboratory strains [37] we studied in detail, and we have not observed any obvious effect during this period in any analyzed strain. Environmental differences may be important. Cage cleanliness, changing frequency and housing density can alter drug metabolism and the effect of anesthesia in rats [38,39]. The type of bedding used also may be important. We use wood shavings for bedding and wood shavings expose the mice to terpenes. Terpene administration or environmental exposure to terpenes in wood shavings alters drug resistance and decreases the effect of anesthetic agents in both rats and mice [40-45]. + +Risk factors for increased IOP + +Some epidemiological studies implicate factors such as diabetes, vascular hypertension, arterial hypotension, vasospasm, aberrant autoregulation of blood flow and sex in glaucoma. Other studies find no association between these factors and glaucoma [2,46-48]. Similarly, the effects of various factors including age, gender, blood pressure, obesity and diabetes have been variably associated with elevated IOP. We evaluated the relationship between these latter factors and IOP in genetically homogeneous mouse strains in a controlled environment. + +Age + +Although within the range of variability observed in young mice, the IOP of B6 mice modestly decreased around 1 year of age. This decrease was statistically significant compared to young mice measured at the same time. At 2 years of age the IOP of B6 mice had decreased further, though an effect of anesthesia in these very old mice cannot be ruled out [49]. The IOP of 129P3/J mice also decreased with age but only at the oldest age examined (18 months). Decreasing IOP correlates with increasing age in the human Japanese population [50,51]. Further studies of B6 mice may allow experimental investigation of this effect. Additional studies may also identify " normal" mouse strains that develop increased IOP with age as generally occurs in Western populations [52,53]. We previously demonstrated that the glaucomatous strains DBA/2J and AKXD-28/Ty develop elevated IOP with age [14,19]. + +Gender + +In the examined strains, we found no consistent differences in IOP between males and females. This was true at all ages for the 3 strains that were aged to 18 months or older. This is in agreement with a number of human studies, which show that IOP is equal between the sexes [52,53]. However, some studies have found sex-specific differences (typically with higher IOP in females and the magnitude of the difference increasing after 40 years of age) [53,54]. Of possible relevance, we previously reported that female mice of strains DBA/2J and AKXD-28/Ty develop elevated IOP at an earlier age than males [14,19]. + +Blood pressure + +Some but not all human studies have reported a positive association between IOP and blood pressure [48,52]. Our comparison of the relationship between blood pressure and IOP in young, adult female mice of different mouse strains, whose blood pressures differed up to 36 mmHg, did not reveal a positive correlation. Further studies are needed to determine if blood pressure correlates with IOP in males, and to determine the relationship between blood pressure and IOP in various mouse strains with age. + +Obesity and diabetes + +Obesity or higher body mass index have been implicated by some but not other studies as risk factors for increased IOP and glaucoma [51,55-57]. Similarly, diabetes or the combination of diabetes and obesity have been variably associated with elevated IOP and glaucoma [46,52,58-62]. To test if genetic perturbations that cause obesity and diabetes can alter IOP, we compared groups of mice that were genetically similar except that they were either homozygous or heterozygous for a leptin receptor mutation (db) that results in early onset obesity and diabetes. The obese, diabetic mice had higher IOPs than their lean, non-diabetic littermates. Thus, epidemiological associations between increased IOP and obesity or diabetes are supported by this work and appear to be functionally relevant. Further experiments with obese non-diabetic or diabetic non-obese mice will help to characterize the separate effects of these risk factors. + +IOP is increased during the dark period of the day + +Diurnal variation in IOP is common in humans and laboratory animals [53]. The molecular mechanisms underlying the diurnal rhythm are not defined but increased aqueous humor production or flow occurs during the period of increased IOP in both rabbits and humans [63-65]. Small changes in the resistance to aqueous humor drainage may also contribute to diurnal differences in IOP [66,67]. We first suspected IOP changes with time of day when the IOP of a group of B6 mice measured in the hour prior to onset of the dark period appeared to be higher than at other times of day. Previously, a rise of IOP was reported to occur before onset of the dark period in rats [21], and rats and rabbits were shown to have higher IOP during the dark period compared to the light period [21,68,69]. Thus, we compared the IOPs of mice at different times of day and identified several strains with significantly higher IOP during the dark compared to the light period. The magnitude of the difference varies with strain, and was greatest in SWR/J. The IOP increase in the dark is not dependent on functional rod and cone photoreceptors since these cells degenerate in SWR/J mice due to homozygosity for the Pde6brd1 mutation. In agreement with this finding, circadian regulation of wheel running by light was previously reported in mice lacking rods and cones [70]. Interestingly, the IOP of strain CBA/CaJ, which has one of the highest daytime IOPs does not appear to increase in the dark. Further more detailed studies are needed to define the characteristics of the diurnal rhythm of intraocular pressure in mice, and to determine whether it is lacking or has a different timing in strain CBA/CaJ. Analysis of these mouse strains may increase understanding of the molecular mechanisms controlling diurnal rhythms of IOP and that may be relevant to glaucoma. + +Car2 deficiency does not alter IOP + +Bicarbonate formation is important for aqueous humor secretion from the ciliary processes and carbonic anhydrase (CA) facilitates this secretion. There are multiple forms of CA and the CAII isoform is reported to be the predominant form in the ciliary processes [71,72]. Our experiments show that a genetic deficiency of CAII in mice homozygous for a mutation in the Car2 gene does not alter IOP. CAIV activity was recently demonstrated in the ciliary processes [73] and so our data may support a more substantial role for CAIV compared to CAII in aqueous humor secretion. It also is possible that CAII substantially contributes to aqueous humor secretion but that functional mouse CAIV is sufficient to prevent an effect of CAII deficiency on IOP in Car2 mutant mice. In support of a role for both enzymes, a greater than 90% inhibition of CA is required for significant reduction of aqueous secretion [71,72]. + +Tyrosinase deficiency results in increased IOP + +Tyrosinase is the first enzyme of the pigment production pathway. Tyrosinase deficiency causes albinism and has various ocular consequences. These include alteration of the number of ipsilaterally projecting retinal axons and substantially increased light penetration past the iris [74]. It is not known if these abnormalities affect mammalian IOP. Here, we show increased IOP in mice lacking tyrosinase activity compared to otherwise genetically identical pigmented B6 mice. Additionally, IOP differences between the light and dark period of the day were detected in the pigmented but not the albino B6 mice. Thus, albinism can affect the diurnal pattern of IOP changes. In agreement with this result, mice with albino eyes that are homozygous for tyrosinase or pink eye dilution mutations have altered diurnal rhythms compared to pigmented mice [75]. Albinism by itself is either not sufficient to alter the diurnal rhythm of IOP or alters it in different ways depending upon genetic background, however, since the albino strains BALB/cByJ and SWR/J had increased IOP during the dark. Diurnal rhythms are known to depend on visual pathways and to respond to light intensity. Exposing rats to 24 hours of low light abrogates the diurnal fluctuation of IOP and results in constantly elevated IOP [36]. Further experiments will determine the nature of the diurnal rhythm of IOP in the albino B6 mice and if its alteration or other mechanisms result in IOP elevation. + +Conclusions + +A broad range of reproducible IOP differences exists between inbred mouse strains and a diurnal rhythm of IOP exists in different strains. Various factors have been variably associated with risk for increased IOP in humans. Genetically uniform, mice can be used to study the effects of these risk factors on IOP. In trained hands, our measurement procedure is reliable, accurate and rapid enough to allow large scale genetic studies of factors determining IOP. Mice have great potential for helping to characterize the molecular mechanisms affecting IOP. + +Materials and Methods + +Animal husbandry + +All experiments were performed in compliance with the ARVO statement for use of animals in ophthalmic and vision research. All mice were bred and maintained at The Jackson Laboratory. Mice were housed in cages containing white pine bedding and covered with polyester filters. For most experiments, the mice were fed NIH31 (6 % fat) chow ad libitum, and their water was acidified to pH 2.8 to 3.2. B6 mice develop diet induced diabetes when maintained on a high fat diet [76]. To ensure that we were analyzing the effect of age and not diabetes, the B6 mice in the aging experiment were fed NIH31 (4% fat) chow. We have found no differences in IOP between B6 mice housed on the 4% fat and 6% fat versions of this otherwise identical diet. The mice were group housed and the cages were changed one time per week. If any cage appeared soiled between scheduled changes, the mice were placed in a clean cage. The environment was kept at 21°C with a 14 hour light: 10 hour dark cycle. The colony was monitored for specific pathogens by The Jackson Laboratory's routine surveillance program (see for specific pathogens). + +Intraocular pressure + +Intraocular pressures were measured as described elsewhere [13,77]. The mice were typically acclimatized to the procedure room for at least 2 weeks prior to measurement, but sometimes between 1 and 2 weeks. Although it was not possible to include all strains in each measurement period, mice of different strains were intermixed. As demonstrated here, the IOPs of C57BL/6J are very consistent over time and so these animals were interspersed with experimental mice during all experiments to ensure that calibration had not drifted and that the system was functioning optimally. Whenever possible, the investigator measuring IOP did not know the genotypes of the animals. It was not possible to analyze all age groups of each strain at the same time in the aging experiments. Therefore, to control for potential IOP changes due to measurement time and not age, approximately 3 month old B6 mice were assessed at the same time as each age group. All dark period measurements were made between 1 and 3 hours after the lights turned off. The room was equipped with dim red lights and mice were protected from all light exposure during set up. Each mouse was briefly exposed to the red light when the anesthetic agents were administered. When adequate anesthesia was achieved (after 3 to 4 minutes), the mouse was placed on the measurement platform and the white light of the microscope was turned on (for approximately 1 and a half minutes) to allow ocular cannulation, IOP measurement and post-measurement tests [13] that guard against artifactual data. The white light was used at very low intensity and was dim but we cannot rule out the possibility that this brief exposure altered the IOP. All other mice were protected from light exposure throughout the time an individual mouse was analyzed. + +Blood pressure + +The blood pressures of conscious mice of each strain (6 to 12 females per strain) were measured with a tail-cuff system as reported [78], except that 5 days of training were used. The mice were analyzed in the same procedure room as was used for IOP measurment. + +Clinical examinations + +For most strains, anterior chambers were examined with a slit lamp biomicroscope [16]. At least 8 mice of each strain shown in figure 1 were evaluated. However, the anterior chambers of C57BLKS/J mice were only evaluated under a dissection microscope at the time of IOP measurement. + +Histological analysis + +Eyes from at least 2 mice of the listed strains were fixed (4% paraformaldehyde or Fekete's acid-alcohol-formalin fixative) processed, paraffin embedded and sectioned as previously reported [15,79], except that the paraformaldehyde was buffered with 0.1 M phosphate buffer. All strains other than CBA/CaHN and C57BLKS/J strains were evaluated. The eyes of CBA/CaJ and BALB/cJ mice were also fixed and processed for plastic embedding (Historesin, Leica, Heidelberg, Germany), and sectioned as previously reported [14,79]. Saggital sections including the pupil and optic nerve were collected and analyzed as they contain most ocular structures. + +Analysis of Myoc + +Exons and the proximal promoter of the mouse Myoc gene were amplified from mouse genomic DNA using the following combinations of primers: + +Exon 1: 5'-cttgcaggagaactttccagaa-3' and 5'-atctcgaaggagattgttatagg-3' + +5'-gaccagctggagacccaaaccag-3' and 5'-gctcagatccactgacctaaa-3' + +Exon 2: 5'-tgaagccatactttaccaaccat-3' and 5'-caaaagggagaagtctaacttc-3' + +Exon 3: 5'-agtcaaggctcacagagctaa-3' and 5'-aagagtagctgctcaccgtgtacaag-3' + +5'-agacattgacttagctgtggat-3' and 5'-cggaacttcaccttttctggc-3' + +Promoter: 5'-taggagaagtctcattatactgc-3' and 5'-ttcactggaccagcataagga-3' + +5'-tctgaggatgttcacaggtttat-3' and 5'-tcttctggaaagttctcctgca-3' + +Samples underwent 30 cycles of amplification with Perkin-Elmer Taq polymerase in a PTC Thermal Cycler (MJ Research, MA) (94° for 40 sec, 57° for 1 min, 72° for 2 min). The PCR products we purified and sequenced as described [22]. + +Abbreviations + +Intraocular pressure (IOP), C57BL/6J (B6), chromosome (Chr), polymerase chain reaction (PCR), carbonic anhydrase (CA) + +Acknowledgments + We thank Norma Buckley, Felicia Farley and Jennifer Smith for their assistance with data entry, references, and figures. We also thank Jane Barker for the Car2 mice, Marianna Mertts for her help with analysis of Myoc alleles, and members of the John laboratory, Tatyana Golovkina, Edward Leiter and Timothy O'Brien for critical reading of the manuscript. Supported in part by AHAF 97437 and G1999023, NIH EY11721 and HL55001. Core services were subsidized by grant CA34196. Major funding was provided by the Howard Hughes Medical Institute. SWMJ is an Assistant Investigator of The Howard Hughes Medical Institute. \ No newline at end of file diff --git a/src/test/resources/test_load_old_coreference/Articles/small_11319941.txt b/src/test/resources/test_load_old_coreference/Articles/small_11319941.txt index 2552ae2d..5250db93 100644 --- a/src/test/resources/test_load_old_coreference/Articles/small_11319941.txt +++ b/src/test/resources/test_load_old_coreference/Articles/small_11319941.txt @@ -1,169 +1,169 @@ -Complex trait analysis of the mouse striatum: independent QTLs modulate volume and neuron number - -Abstract - -Background - -The striatum plays a pivotal role in modulating motor activity and higher cognitive function. We analyzed variation in striatal volume and neuron number in mice and initiated a complex trait analysis to discover polymorphic genes that modulate the structure of the basal ganglia. - -Results - -Brain weight, brain and striatal volume, neuron-packing density and number were estimated bilaterally using unbiased stereological procedures in five inbred strains (A/J, C57BL/6J, DBA/2J, BALB/cJ, and BXD5) and an F2 intercross between A/J and BXD5. Striatal volume ranged from 20 to 37 mm3. Neuron-packing density ranged from approximately 50,000 to 100,000 neurons/mm3, and the striatal neuron population ranged from 1.4 to 2.5 million. Inbred animals with larger brains had larger striata but lower neuron-packing density resulting in a narrow range of average neuron populations. In contrast, there was a strong positive correlation between volume and neuron number among intercross progeny. We mapped two quantitative trait loci (QTLs) with selective effects on striatal architecture. Bsc10a maps to the central region of Chr 10 (LRS of 17.5 near D10Mit186) and has intense effects on striatal volume and moderate effects on brain volume. Stnn19a maps to distal Chr 19 (LRS of 15 at D19Mit123) and is associated with differences of up to 400,000 neurons among animals. - -Conclusion - -We have discovered remarkable numerical and volumetric variation in the mouse striatum, and we have been able to map two QTLs that modulate independent anatomic parameters. - -Background - -The dorsal striatum is a massive nucleus in the basal forebrain that plays a pivotal role in modulating motor activity and higher cognitive function. Approximately 90% of all neurons in the striatum - 1.5 to 2.5 million in mice [1,2] and 110-200 million in humans [3,4] - belong to an unusual type 'of inhibitory projection cell referred to as medium spiny neurons [5-8]. Striatal neurons are divided into two major subpopulations (patch and matrix), that have somewhat different gene expression profiles and have different patterns of pre- and postsynaptic connections [9-13]. - -Numbers of medium spiny neurons and ratios of these and less numerous striatal interneurons are critical variables that influence motor performance and aspects of cognition. In the case of Huntington disease the loss of 15-30% of the normal complement of medium spiny neurons leads to distinct movement disorder in both humans and transgenic mouse models [14-17]. The subset of genes that normally control the proliferation, differentiation, and survival of striatal neurons [18-20] are therefore of considerable importance in ensuring adaptive behavior at maturity. - -In this study we use a forward genetic approach [21, 22] to begin to map and characterize members of the subset of normally polymorphic genes that specifically modulate the production and survival of striatal neurons. Our analysis of the neurogenetic control of striatal cell populations relies on the combination of two complementary quantitative approaches. The first of these, complex trait analysis, is a comparatively new genetic method that makes it possible to map individual loci that underlie polygenic traits [22,23]. The second consists of a set of unbiased stereological procedures that can be used to obtain cell counts accurately and efficiently from large numbers of cases [24,25]. - -From a technical point of view the mouse striatum has several advantages that make it an excellent target for complex trait analysis of the mammalian CNS. First, it is a large, cytoarchitectonically distinct region comprising approximately 5-6% of the volume of the mouse brain. Second, the dorsal striatum has a comparatively homogenous cellular composition, potentially reducing the number of quantitative trait loci (QTLs) that affect striatal neuron number. Finally, recent experiments on the molecular control of telencephalic development have highlighted a number of genes that influence neuron proliferation and differentiation of the striatum and other neighboring forebrain structures [18][26-30]. - -We report here both neuroanatomic and genetic quantitative evidence that the size of the striatum and the number of neurons contained within it are modulated independently. - -Results - -The results are divided in two sections. The first is a biometric analysis of variation of size and neuronal populations in mouse striatum. The second section is a quantitative genetic dissection and QTL analysis of variation in the size and neuronal population of the mouse striatum. - -Phenotypes - -Strain differences - -Brain Weight and Striatal Volume. Five strains were chosen to represent low, mid, and high brain weights (Fig 1A). Brain weights of the two high strains, BXD5 (540 ± 9 mg SEM) and BALB/cJ (527 ± 13 mg), are significantly greater (P < .001) than that of C57BL/6J (476 ± 5 mg). Similarly, the brain weights of A/J (395 ± 5 mg) and DBA/2J (403 ± 5 mg) are significantly lower than those of the other three strains (P < .001). As anticipated, differences in striatal volume correspond well with differences in brain weight and volume. The striata of BXD5 (31.0 ± 0.9 mm3) and BALB/cJ (32.5 ± 1.6 mm3) mice are significantly larger (P < .001) than those of C57BL/6J (23.6 ± 0.6 mm3), A/J (21.7 ± 1.0 mm3), and DBA/2J (22.8 ± 0.6 mm3) strains. - -Figure 1 - -Histograms of histologic phenotypes for inbred strains of mice.  A. Brain weight differences are apparent between the three categories (F4,28 = 82.1, P < .001). Asterisk indicates significant differences on post-hoc tests (P < .005). B. Striatal volume. There are significant differences in striatal volume between the low brain weight strains (A/J, DBA.2J) and the high brain weight strains (BALB/cJ, BXD5). C57BL6/J mice differ from the high, but not low brain weight strains (F4,28 = 28.9, P < .001). Asterisk indicates significant differences on post-hoc tests (P < .005). C. Neuron-packing density in the striatum. In general, brains with smaller striata have greater neuron-packing density (F4,28 = 17.6, P < .001). Asterisks indicate significant differences on post-hoc tests (P < .005). D. Neuron number in the striatum. There are no significant difference in striatal neuronal number among the five inbred strains (F4,28 = 2.0. ns). - -Striatal Neuron-Packing Density. There is a significant difference among strains in the packing density of striatal neurons (P < .001 for all comparisons). A/J has a higher mean density (84,800 ± 3,500 neurons/mm3) than all strains other than DBA/2J (80,400 ± 2,700 neurons/mm3). BALB/cJ (57,700 ± 2,500 neurons/mm3) and BXD5 (62,700 ± 2,600 neurons/mm3) do not differ significantly from each other, but do differ from all other strains. C57BL/6J (73,100 ± 1,700) differs from all other mice with the exception of DBA/2J. Inbred strains with smaller striatal volumes have higher neuronal packing densities (Fig 1C). - -Striatal Neuron Number. As a result of the reciprocal relation between volume and density, there is no significant difference in striatal neuron number among the five strains. Total striatal neuron numbers ranges over a very modest range - from a low of 1.72 ± .015 million in C57BL/6J to a high of 1.93 ± .035 million in BXD5. - -Correlational Statistics - -Our comparisons are based on five strains, and one consequence of this modest sample size is that sampling errors and intraclass correlations may bias the results [31]. We therefore also analyzed a larger sample of genetically heterogeneous ABF2 intercross animals (an F2 intercross between A/J and BXD5). We first determined that the distribution of all four dependent measures were normally distributed (Fig 2), before subjecting the data to correlational analysis. In this set of animals brain weight correlates significantly with striatal volume (r = .82, df = 42, P < .001, Fig 3A). Striatal volume is negatively correlated with neuron-packing density overall (r = -0.32, df = 42, P < .05), again indicating that the greater the striatal volume, the lower the neuron-packing density (Fig 3B). Despite this relationship, the total population of striatal neurons correlates positively with striatal volume in this larger sample (r = .60, df = 42, P < .001; Fig 3C). In this crucial respect, results from the genetically heterogeneous F2 animals differ from those of inbred strains. - -Figure 2 - -Histograms of distribution of dependent measures in ABDF2 subjects. Brain weight (A: Χ2 = 2.91, df = 2, ns), striatal volume (B: Χ2 = 1.13, df = 2, ns), striatal neuron-packing density C: Χ2 = 1.64, df = 2, ns), and striatal neuron number (D: Χ2 = 0.73, df = 2, ns) are all normally distributed (Kolmogorov-Smirnov Normality Test). - -Figure 3 - -Scatterplots of subjects from an F2 intercross between a BXD5 and A/J inbred strains (ABF2, N = 44) illustrating correlations of striatal volume with brains weight (A), striatal neuron-packing density (B), and striatal neuron number (C). There are significant positive correlations between striatal volume and both brain weight and neuron number. Striatal volume negatively correlates with neuron-packing density in these subjects. ***P < .001; *P < .05. - -QTL Analysis - -The analysis in this section is focused principally on two traits: striatal volume (absolute and residual values), and striatal neuron number (also absolute and residual values). Residuals for these traits were computed for both traits to minimize the influence of brain weight. Two additional traits were mapped to assess specificity of the effects of putative QTL-bearing intervals, namely brain weight and non-striatal brain weight (Table 1). This last parameter was estimated by subtracting the estimated bilateral striatal weight (assuming a specific gravity of 1.0) from that of the whole brain. - -Table 1 - -Linkage Statistics for Striatal Volume and Neuron Number - -** Alleles inherited from BXD5 that increase a value are defined as positive additive effects. † LRS values can be converted to LOD scores by dividing by 4.6. Previously described QTL for brain weight [56]. Column headings:Trait, the phenotype used in linkage analysis; Marker, the symbol of the microsatellite loci used to genotype mice; Chr, the chromosome on which the marker is located; LRS is the likelihood ratio statistic (4.6 x the LOD score); %Var is the percentage of the total phenotypic variance apparently accounted for by differences in genotype in the an interval defined by the marker; P, the point-wise probability that the linkage is a false positive. Add and Dom are estimates of the additive and dominance effects of genetic variation. Units are the same as those of the traits (volume in mm3 or numbers of cells). The two bold loci marked with asterisks achieve genome-wide significance in this sample population. - -The strongest linkage was found between variation in striatal volume and an interval on chromosome 10 between the markers D10Mit194 at 29 cM and D10Mit209 at 49 cM. The likelihood ratio statistic - a value that can be read as a chi-square - peaks in this 20 cM interval at 17.5 and is associated with a P value of 0.00016 (Table 1), equivalent to a LOD score of 3.8 (Fig 4A). The genome-wide probability of achieving a linkage of this strength by chance is <0.05. This locus accounts for as much as a third of the total phenotypic variance in striatal volume and as much as 50% of the genotypic variance (h2 = 0.39). Alleles in this Chr 10 interval that are inherited from the BXD5 parental strain contribute to a significantly larger striatum than do alleles inherited from A/J. Mean bilateral volume corrected for shrinkage for the AA genotype at D10Mit186 (n = 11) is 25.3 ± 1.3 mm3 whereas that for AB and BB genotypes are 29.1 ± 0.7 mm3 and 30.0 ± 0.5 mm3 (n = 14 and 11), respectively. The insignificant difference between BB and AB genotypes suggests that the B allele is dominant. BXD5 is a recombinant inbred strain initially generated by crossing strains C57BL/6J and DBA/2J. Most of the proximal part of Chr 10 in BXD5 is derived from DBA/2J, but a short interval between 40 and 50 cM is derived exclusively from C57BL/6J. This C57BL/6J region corresponds to the peak LRS score. We estimate a single B allele inherited from the BXD5 parent increases striatal volume by approximately 2.0-2.5 mm3. - -Figure 4 - -Plots of LOD scores and LRS for each of the two traits. A. Plot for Striatal volume on Chr. 10. Peak values for the LRS are around 30 cM. B. Plot for striatal neuron number on Chr. 19. Peak values for the LRS are around 50 cM. - -The Chr 10 interval has an appreciable effect on brain size. Variance in brain weight minus that of the striatum is associated with an LRS of 14.2 in the same location between D10Mit106 and D10Mit186. Each B allele adds 20-30 mg to total brain weight. The Chr 10 locus clearly has pleiotropic effects on the CNS, but its effect on the striatum is more intense. Nonetheless, until we know more about the scope of effects, we have opted to give this Chr 10 locus a generic name, Brain size control 10a (Bsc10a). The specific striatal component of the Bsc10a was analyzed by mapping the residual striatal values that corrects for differences in brain volume. The specific effect of a B allele is reduced from 2.5 mm3 to 0.5-1.0 mm3, and the LRS is reduced to 6.9, a value which still has a point-wise probability of only 0.03, indicating a significant independent effect. - -We identified a second strong candidate interval on distal Chr 19 that may modulate striatal neuron number. The LRS peaks at 15.0 (a LOD of 3.26) at one of our more distal markers (D19Mit123, 51 cM, p = .00055). In mapping neuron number we actually used the residual cell population as a trait, and we are therefore confident that this interval has a selective, although not necessarily exclusive, effect on numbers of neurons in striatum (Fig 4B). Each B allele increases the population by approximately 200,000 cells. The AA genotype has an average residual population that is 116,000 less than the mean (i.e., a residual of -116,000; n = 12), the AB heterozygotes have an average of -8,000 neurons (n = 18), and the BB homozygotes have an average of 290,000 neurons (n = 6). Corresponding absolute numbers of striatal neurons for the three genotypes are 1.8, 1.9, and 2.2 million. The two-tailed genome-wide probability of this locus is at the threshold for declaring a QTL (p = 0.035 ± 0.01 two-tailed for an additive model and 0.08 ± 0.2 for a free model). No other chromosomal interval has an LRS score remotely as high as distal Chr 19. The next highest LRS value is only 7.2 on Chr 1 near D1Mit65 and has a point-wise probability that is 50 times higher than the Chr 19 interval. Given these findings we have given the distal chromosome 19 interval the name Striatal Neuron Number 19a (Stnn19a). Allelic differences in this interval account for up to 30% of the total variance in striatal neuron number. As the heritability of this trait is 0.64, this trait can be said to account for over 80% of the genetic variance. Residual neuron counts have a higher LRS than the total neuron counts (LRS of 15.0 vs. 11.9). This indicates that the Chr 19 interval is likely to have selective effect on the striatum. Consistent with this hypothesis, the LRS for brain weight on distal Chr 19 is under 1.0, and weights of all three genotypes average 480 ± 5 mg. Linkage on Chr 19 is not affected at all by remapping with control for the striatal volume locus on Chr 10. Thus, Chr 10 and Chr 19 intervals do not interact or cooperate in controlling striatal volume or neuron number. - -Discussion - -Striatal volume correlates strongly to brain weight. Nonetheless, a significant fraction of the variation in both striatal volume and neuron number among inbred strains of mice can not be predicted on the basis of brain weight or volume. This non-predictable variation is of particular interest to us because it is generated in large part by genes that have more intense or even selective effects on the dorsal striatum than other brain regions. We have succeeded in mapping one QTL with somewhat more intense effects on the volume of the striatum than the rest of the brain to the proximal half of chromosome 10. We have also mapped a QTL with selective effects on number of neurons in the striatum to the distal end of chromosome 19. - -Between-strain variability - -Variation in the size of CNS regions and cell populations is already known to be substantial in the striatum and in many other regions of the CNS. The number of striatal cholinergic neurons, for example, varies 50% among 26 BXD RI lines [32]. Interestingly, this variation appears to be unrelated to susceptibility to haloperidol-induced catalepsy. The volume of the granule cell layer of the dentate gyrus varies as much as 40-80% among different inbred strains of mice [33-35]. More recent experiments using stereologic techniques have reported substantial variation in both neuron number and volume of the pyramidal and dentate cell layers of the hippocampus [36]. Granule cell numbers in NZB/BINJ and DBA/2 were 37-118% greater than C57BL/6J mice, and differences in volume were even larger (up to 150% larger in the DBA/2 as compared to the C57BL/6J mice). There is also substantial among-strain variation in other structures in the nervous system including the nucleus of the solitary tract [37], the spinal nucleus of the bulbocavernosus [38], and retinal ganglion cells [39, 40]. Taken together, these results point to a high level of variability in neuron number in the CNS of mice. - -Based on these findings, we anticipated significant differences in the striatum of inbred strains. We did find large strain differences in volume. What was surprising was that in our set of five highly divergent strains the differences in volume were not matched by significant differences in neuron number. There was in fact a strong inverse relationship between striatal volume and neuron-packing density that led to a remarkably stabile neuron number. The variation in neuron-packing density with volume contrasts somewhat with the report of Abusaad and colleagues [36], who found no significant differences (P = .06) in neuronal packing density in the dentate gyrus cell layers of the hippocampus among the three mouse strains that they examined, but did see a significant difference in the pyramidal cell layers. A recent report demonstrates a 25% range of granule cell packing density among 35 BXD recombinant inbred lines [41], a finding supporting the notion that packing density varies significantly among mouse strains. - -These data suggest that principles that govern the relationship between neuronal volume and neuron-packing density may differ between the striatum and the other CNS regions. The striatum may be a special case - a region in which numbers of medium spiny neurons is more tightly regulated than neuron populations in some other regions. It could also be that measuring specific neuronal subtypes would demonstrate a greater amount of variance than we currently report [32]. Given the relatively small number of strains that we have sampled, our hypothesis of lower variation in striatal cell populations requires a more extensive test, a problem which we are now pursuing using the large numbers of strains in the Mouse Brain Library . - -Verification of QTL Results - -We have quantified the population of striatal neurons on both sides of the brain in 77 cases total. This is a large sample from the perspective of stereological analysis of the mouse CNS, but from the perspective of gene mapping and quantitative genetics this is, of course, a modest-sized sample size and one that will need to be treated as a starting point for more refined genetic analysis. Nonetheless, we have succeeded in mapping one locus, Bsc10a, which modulates striatal volume with a genome-wide significance of P < 0.05. We have also discovered linkage on Chr 19 to variation in the total number of striatal neurons. These mapping data are concordant with our strain comparison and collectively suggest that there is apparently no significant genetic correlation between striatal volume and neuron number. To confirm and refine our genetic dissection of the striatum we plan to analyze the AXB and BXA recombinant inbred (RI) strains generated by crossing A/J with C57BL/6J. This large RI set has already been processed and regenotyped and is now part of the Mouse Brain Library (see and ). An analysis of RI strains can be quickly extended by generating F1 intercrosses between A/J and the subset of RI strains that have recombinations in the QTL intervals on Chrs 10 and 19. Isogenic sets of RI-backcross progeny can be used to test specific models of gene action, for example, the dominance of the B allele at Bsc10a. - -A major goal of QTL mapping is to define loci that affect critical phenotypes with sufficient precision to generate short lists of candidate genes. Generating lists of candidates for QTLs will soon be greatly facilitated by more complete and better annotated mouse and human sequence databases combined with information on gene expression profiles of whole brain and striatum [42]. Once chromosomal positions of the QTLs have been determined to a precision of 1-3 cM, reducing the probability that a QTL actually represents a cluster of linked genes, it will become appropriate to assess strengths of candidates using transgenic animals and by sequence comparisons [43]. - -Interval mapping places the QTL for Bsc10a in the central portion of Chr 10 in proximity with a number of genes known to affect brain development. One of these is Grk2, a member of the family of ionotropic glutamate receptor genes that is thought to play a role in modulating Huntington disease [44]. In the mouse, members of this receptor type act to indirectly down-regulate synaptic activity in the striatum [45]. Another gene that falls into the Bsc10a interval is Macs, the gene encoding the myristoylated alanine-rich C kinase substrate (MARCKS protein). This molecule is important in cerebral development. MARCKS-deficient mice have a high incidence of exencephaly, agenesis of the corpus callosum, and abnormalities other forebrain structure including widespread neocortical ectopias [46, 47]. The MARCKS-related protein gene is expressed in the striatum during early brain development in the rat [48]. - -The location of the QTL modulating striatal neuron number to the distal part of chromosome 19 places it in proximity to a number of genes that have been recently been shown to be important factors in telencephalic development, particularly Vax1. Vax1 is a homeobox-containing gene and is a close relative of the Emx and Not genes. Vax1 is localized during development to the anterior ventral forebrain, and is expressed in the striatum during embryogenesis [28]. This molecule also has an important role in axon guidance: both the anterior portion of the corpus callosum and the optic chiasm are malformed or absent in Vax1 knockout mice [49]. In addition, Vax1 interacts with several molecules including sonic hedgehog,Pax2, Pax6, and Rx that are known to be important during development of the basal forebrain [27, 50]. - -Brain volume and neuron number - -It has previously been shown that differences in brain weight are proportional to total brain DNA content and consequently to total CNS cell number [51, 52]. For this reason, brain weight has been suggested to be a good surrogate measure for total cell number in mice, as in humans [53]. Moreover, previous work has demonstrated a tight link between regional brain volume and neuron number [54, 55], which implies that volumetric measures reliably estimate neuron number. With this literature in mind, we expected that our measures of striatal volume would predict neuron number in this nucleus. With the inbred strains, however, we found that strains with small striata (A/J) had virtually the same number of neurons as those with large striata (BALB/cJ). This result indicates that at least for the striatum, volume is not a reliable indicator of neuron number, and that they may be two independent traits. This conclusion is bolstered at the genetic level by our report of two distinct QTLs for these two morphologic phenotypes. Taken together with previous reports [51-53], we speculate that while total neuron number in the cerebrum may relate to total brain weight, the relationship of these two variables is flexible at the regional level. - -Materials and Methods - -Subjects - -Thirty-four of the 78 mice that we analyzed were common inbred strains that were selected to sample a wide range of brain weights, and by expectation, striatal volumes. Low brain weight strains included A/J (n = 5) and DBA/2J (n = 8). Mid and high brain weight strains include C57BL/6J (n = 10), BALB/cJ (n = 5), and BXD5 (n = 6, formally this recombinant inbred strain is known as BXD-5/Ty). One of the ten C57BL/6J subjects was removed from the analysis because values for striatal neuron number were anomalous with Z scores more than 2.5. - -To map QTLs that modulate variation in CNS size and cell populations we used an F2 intercross between a strain with low brain weight (A/J) and a strain with high brain weight (BXD5). A total of 518 of these ABDF2 progeny were generated, but for this study we selected a subset of 44 cases, of which 36 were fully genotyped (see below). The sample included 20 animals in the lowest and highest quartiles, and 24 cases within 0.5 SD of the mean brain weight. We therefore measured subjects representing the full range of brain weights (see Fig 2A). The ABDF2 intercross has been used previously to map QTLs that modulate total brain weight [56] and cerebellar volume [57]. The BXD5 strain used as the paternal strain in this intercross is a recombinant inbred strain that was derived by crossing C57BL/6J and DBA/2J lines of mice [58]. As a result, ABDF2 progeny are a mixture of three genomes (50% A/J, 25% C57BL/6J, and 25% DBA/2J). However, at any given locus there will be only two alleles, A and B, or A and D. All stocks of mice were obtained from the Jackson Laboratory . ABF2 mice were generated at the University of Tennessee by Dr. Richelle Strom [56] using Jackson Laboratory foundation stock. The F2 mice ranged in age from 35 to 143 days. The standard inbred strains ranged in age from 51 to 365 days. We studied approximately equal numbers of males and females. - -Histological Preparation - -All brains analyzed in this study are part of the Mouse Brain Library (MBL). The MBL is both a physical and Internet resource. High-resolution digital images of sections from all cases are available at . - -Mice were anesthetized deeply with Avertin (1.25% 2,2,2-tribromoethanol and 0.8% tert-pentyl alcohol in water, 0.5-1.0 ml ip) and perfused through the left ventricle with 0.9% sodium phosphate buffered (PB) saline (pH 7.4) followed by 1.25% glutaraldehyde/1.0% paraformaldehyde in 0.1 M PB (pH 7.40) over a period of 2 to 4 min. An additional 10-ml of double-strength fixative (2.5% glutaraldehyde/2.0% paraformaldehyde) was injected for 1 to 2 min at an increased flow rate. The head with brain was placed a vial with the last fixative and stored at 4°C until dissection. - -Following dissection, the brains were weighed immediately. Brains were subsequently shipped to Beth Israel Deaconess Medical Center. They were immersed in fresh 10% formalin for at least one week before being embedding in celloidin [59]. Brains were cut on a sliding microtome at 30 μm in either horizontal or coronal planes. Free-floating sections were stained with cresylechtviolett and four series of every tenth section were mounted on slides and coverslipped (see for further details). - -Histologic Phenotypes - -Total Brain Volume - -To accurately estimate histological shrinkage for each brain in the sample, we determined the volume of the entire brain and took a ratio of this value to the original fixed brain weight. Brain volumes were determined from serial sections using point counting and Cavalieri's rule. High-resolution (4.5 μm/pixel) images of entire sections were taken from the Mouse Brain Library, and point counting was performed on these images using NIH Image 1.55 and an Apple Macintosh computer . If the criteria for using the Cavalieri's estimator were not met (due to missing or damaged sections), a measurement method involving piecewise parabolic integration was employed [60]. Subsequent measurements of striatal volume and neuron packing density were corrected for volumetric shrinkage. The average shrinkage was 62.2 ± 0.4% (a mean residual volume of 37.8%). - -Striatal Volume - -Volume of the striatum was also determined from serial section analysis using point counting and Cavalieri's rule. Images from the sections were captured at 12.5 x and were projected onto a video monitor. Point counting was performed as above. Volume was computed separately for the right and left sides and corrected for shrinkage. - -Striatal Neuron-Packing Density and Neuron Number - -Neurons were counted using the 3-dimensional counting software of Williams and Rakic [24]. A series of six contiguous counting boxes (each 40 x 65 x 20 μm) aligned in a 3 x 2 matrix were placed randomly within the striatum, and those neurons the nucleoli of which were in focus were counted as described previously [61, 62]. This large functional counting box (80 x 195 x 20 μm) was chosen to minimize sampling variance by ensuring an equitable sampling of striatal patch and matrix. Two of these large fields were counted in each of the hemispheres. Neuron-packing density was computed as the number of cells/mm3 corrected for shrinkage. Multiplying the volume of the striatum by its cell-packing density permitted estimation of the number of neurons in that nucleus. - -Reliability - -We determined test-retest reliability by having an observer blindly re-measure striatal volume on a subset of 10 brains from the collection. The observer not only re-measured the striatal volume from the same series of sections as the original measure, but also estimated volume from a second series of 1 in 10 sections offset by 5 sections from the previous series. The correlations among the three estimations ranged from .95 to .99 (P < .05), indicating a high degree of reliability for this dependent variable. - -We assessed reliability of our estimates of neuronal numbers by having an observer blindly re-estimate neuron number in the same 10 brains above. The intra-observer correlation for this measure was .81 (P < .05), which is similar to the reliability seen in previous estimates of neuron number [39, 40]. - -Genotyping and QTL Mapping - -Genomic DNA was extracted from spleens of F2 animals using a high-salt procedure [63]. A set of 82 microsatellite loci distributed across all autosomes and the X chromosome were typed in a set of ABDF2 animals using a standard PCR protocol [64, 65] as detailed in Zhou and Williams [66]. F2 genotypes were entered into a spreadsheet program and transferred to Map Manager QTb28 for mapping and permutation analysis [67]. Map Manager implements both simple and composite interval mapping methods described by Haley and Knott [68]. Two-tailed genome-wide significance levels were estimated by comparing the highest likelihood ratio statistic (LRS) of correctly ordered data sets with LRSs computed for 10,000 permutations of those same data sets [69]. LRS scores can be converted to LOD scores by dividing by 4.6. The 2-LOD support interval of linkage was estimated directly from interval maps. The approximate 95% support interval was estimated by application of equations in Darvasi and Soller [70]. With a modest sample size such as we have been able to examine using unbiased stereological methods, even a QTL responsible for 30 to 50% of the variance. is associated with a 95% interval of 20 to 30 cM. - -Regression Analysis of Trait Values - -The unadjusted striatal estimates vary to a large extent as a result of variation in total brain weight. However, one of our goals in this study is to map QTLs with relatively intense effects on the striatum. For this reason we also have corrected all of the parameters used in the mapping analysis for variation in brain weight using linear regression analysis. We have mapped data with and without compensation for variance in brain weight. The corrected values are referred to as residuals. - -Analysis - -All data were analyzed using regression, correlation, and ANOVA statistical tests (see StrAnatData.xls for original data used to perform this analysis). A Bonferroni/Dunn correction was used for post hoc examination of significant main effects in the ANOVA. This post-hoc test is functionally identical to a Fisher PLSD, but the alpha level is more conservative (.005). - -Supplementary Material - -StrAnatData.xls - -This file contains anatomic data for each of the subjects used in the current experiment. - -Click here to download StrAnatData.xls - -StrMap.qtx - -This file contains the genotyping data from the 82 markers used in the current experiment, in MapManager QTX format. - -Click here to download StrMap.qtx - -Acknowledgements - +Complex trait analysis of the mouse striatum: independent QTLs modulate volume and neuron number + +Abstract + +Background + +The striatum plays a pivotal role in modulating motor activity and higher cognitive function. We analyzed variation in striatal volume and neuron number in mice and initiated a complex trait analysis to discover polymorphic genes that modulate the structure of the basal ganglia. + +Results + +Brain weight, brain and striatal volume, neuron-packing density and number were estimated bilaterally using unbiased stereological procedures in five inbred strains (A/J, C57BL/6J, DBA/2J, BALB/cJ, and BXD5) and an F2 intercross between A/J and BXD5. Striatal volume ranged from 20 to 37 mm3. Neuron-packing density ranged from approximately 50,000 to 100,000 neurons/mm3, and the striatal neuron population ranged from 1.4 to 2.5 million. Inbred animals with larger brains had larger striata but lower neuron-packing density resulting in a narrow range of average neuron populations. In contrast, there was a strong positive correlation between volume and neuron number among intercross progeny. We mapped two quantitative trait loci (QTLs) with selective effects on striatal architecture. Bsc10a maps to the central region of Chr 10 (LRS of 17.5 near D10Mit186) and has intense effects on striatal volume and moderate effects on brain volume. Stnn19a maps to distal Chr 19 (LRS of 15 at D19Mit123) and is associated with differences of up to 400,000 neurons among animals. + +Conclusion + +We have discovered remarkable numerical and volumetric variation in the mouse striatum, and we have been able to map two QTLs that modulate independent anatomic parameters. + +Background + +The dorsal striatum is a massive nucleus in the basal forebrain that plays a pivotal role in modulating motor activity and higher cognitive function. Approximately 90% of all neurons in the striatum - 1.5 to 2.5 million in mice [1,2] and 110-200 million in humans [3,4] - belong to an unusual type 'of inhibitory projection cell referred to as medium spiny neurons [5-8]. Striatal neurons are divided into two major subpopulations (patch and matrix), that have somewhat different gene expression profiles and have different patterns of pre- and postsynaptic connections [9-13]. + +Numbers of medium spiny neurons and ratios of these and less numerous striatal interneurons are critical variables that influence motor performance and aspects of cognition. In the case of Huntington disease the loss of 15-30% of the normal complement of medium spiny neurons leads to distinct movement disorder in both humans and transgenic mouse models [14-17]. The subset of genes that normally control the proliferation, differentiation, and survival of striatal neurons [18-20] are therefore of considerable importance in ensuring adaptive behavior at maturity. + +In this study we use a forward genetic approach [21, 22] to begin to map and characterize members of the subset of normally polymorphic genes that specifically modulate the production and survival of striatal neurons. Our analysis of the neurogenetic control of striatal cell populations relies on the combination of two complementary quantitative approaches. The first of these, complex trait analysis, is a comparatively new genetic method that makes it possible to map individual loci that underlie polygenic traits [22,23]. The second consists of a set of unbiased stereological procedures that can be used to obtain cell counts accurately and efficiently from large numbers of cases [24,25]. + +From a technical point of view the mouse striatum has several advantages that make it an excellent target for complex trait analysis of the mammalian CNS. First, it is a large, cytoarchitectonically distinct region comprising approximately 5-6% of the volume of the mouse brain. Second, the dorsal striatum has a comparatively homogenous cellular composition, potentially reducing the number of quantitative trait loci (QTLs) that affect striatal neuron number. Finally, recent experiments on the molecular control of telencephalic development have highlighted a number of genes that influence neuron proliferation and differentiation of the striatum and other neighboring forebrain structures [18][26-30]. + +We report here both neuroanatomic and genetic quantitative evidence that the size of the striatum and the number of neurons contained within it are modulated independently. + +Results + +The results are divided in two sections. The first is a biometric analysis of variation of size and neuronal populations in mouse striatum. The second section is a quantitative genetic dissection and QTL analysis of variation in the size and neuronal population of the mouse striatum. + +Phenotypes + +Strain differences + +Brain Weight and Striatal Volume. Five strains were chosen to represent low, mid, and high brain weights (Fig 1A). Brain weights of the two high strains, BXD5 (540 ± 9 mg SEM) and BALB/cJ (527 ± 13 mg), are significantly greater (P < .001) than that of C57BL/6J (476 ± 5 mg). Similarly, the brain weights of A/J (395 ± 5 mg) and DBA/2J (403 ± 5 mg) are significantly lower than those of the other three strains (P < .001). As anticipated, differences in striatal volume correspond well with differences in brain weight and volume. The striata of BXD5 (31.0 ± 0.9 mm3) and BALB/cJ (32.5 ± 1.6 mm3) mice are significantly larger (P < .001) than those of C57BL/6J (23.6 ± 0.6 mm3), A/J (21.7 ± 1.0 mm3), and DBA/2J (22.8 ± 0.6 mm3) strains. + +Figure 1 + +Histograms of histologic phenotypes for inbred strains of mice.  A. Brain weight differences are apparent between the three categories (F4,28 = 82.1, P < .001). Asterisk indicates significant differences on post-hoc tests (P < .005). B. Striatal volume. There are significant differences in striatal volume between the low brain weight strains (A/J, DBA.2J) and the high brain weight strains (BALB/cJ, BXD5). C57BL6/J mice differ from the high, but not low brain weight strains (F4,28 = 28.9, P < .001). Asterisk indicates significant differences on post-hoc tests (P < .005). C. Neuron-packing density in the striatum. In general, brains with smaller striata have greater neuron-packing density (F4,28 = 17.6, P < .001). Asterisks indicate significant differences on post-hoc tests (P < .005). D. Neuron number in the striatum. There are no significant difference in striatal neuronal number among the five inbred strains (F4,28 = 2.0. ns). + +Striatal Neuron-Packing Density. There is a significant difference among strains in the packing density of striatal neurons (P < .001 for all comparisons). A/J has a higher mean density (84,800 ± 3,500 neurons/mm3) than all strains other than DBA/2J (80,400 ± 2,700 neurons/mm3). BALB/cJ (57,700 ± 2,500 neurons/mm3) and BXD5 (62,700 ± 2,600 neurons/mm3) do not differ significantly from each other, but do differ from all other strains. C57BL/6J (73,100 ± 1,700) differs from all other mice with the exception of DBA/2J. Inbred strains with smaller striatal volumes have higher neuronal packing densities (Fig 1C). + +Striatal Neuron Number. As a result of the reciprocal relation between volume and density, there is no significant difference in striatal neuron number among the five strains. Total striatal neuron numbers ranges over a very modest range - from a low of 1.72 ± .015 million in C57BL/6J to a high of 1.93 ± .035 million in BXD5. + +Correlational Statistics + +Our comparisons are based on five strains, and one consequence of this modest sample size is that sampling errors and intraclass correlations may bias the results [31]. We therefore also analyzed a larger sample of genetically heterogeneous ABF2 intercross animals (an F2 intercross between A/J and BXD5). We first determined that the distribution of all four dependent measures were normally distributed (Fig 2), before subjecting the data to correlational analysis. In this set of animals brain weight correlates significantly with striatal volume (r = .82, df = 42, P < .001, Fig 3A). Striatal volume is negatively correlated with neuron-packing density overall (r = -0.32, df = 42, P < .05), again indicating that the greater the striatal volume, the lower the neuron-packing density (Fig 3B). Despite this relationship, the total population of striatal neurons correlates positively with striatal volume in this larger sample (r = .60, df = 42, P < .001; Fig 3C). In this crucial respect, results from the genetically heterogeneous F2 animals differ from those of inbred strains. + +Figure 2 + +Histograms of distribution of dependent measures in ABDF2 subjects. Brain weight (A: Χ2 = 2.91, df = 2, ns), striatal volume (B: Χ2 = 1.13, df = 2, ns), striatal neuron-packing density C: Χ2 = 1.64, df = 2, ns), and striatal neuron number (D: Χ2 = 0.73, df = 2, ns) are all normally distributed (Kolmogorov-Smirnov Normality Test). + +Figure 3 + +Scatterplots of subjects from an F2 intercross between a BXD5 and A/J inbred strains (ABF2, N = 44) illustrating correlations of striatal volume with brains weight (A), striatal neuron-packing density (B), and striatal neuron number (C). There are significant positive correlations between striatal volume and both brain weight and neuron number. Striatal volume negatively correlates with neuron-packing density in these subjects. ***P < .001; *P < .05. + +QTL Analysis + +The analysis in this section is focused principally on two traits: striatal volume (absolute and residual values), and striatal neuron number (also absolute and residual values). Residuals for these traits were computed for both traits to minimize the influence of brain weight. Two additional traits were mapped to assess specificity of the effects of putative QTL-bearing intervals, namely brain weight and non-striatal brain weight (Table 1). This last parameter was estimated by subtracting the estimated bilateral striatal weight (assuming a specific gravity of 1.0) from that of the whole brain. + +Table 1 + +Linkage Statistics for Striatal Volume and Neuron Number + +** Alleles inherited from BXD5 that increase a value are defined as positive additive effects. † LRS values can be converted to LOD scores by dividing by 4.6. Previously described QTL for brain weight [56]. Column headings:Trait, the phenotype used in linkage analysis; Marker, the symbol of the microsatellite loci used to genotype mice; Chr, the chromosome on which the marker is located; LRS is the likelihood ratio statistic (4.6 x the LOD score); %Var is the percentage of the total phenotypic variance apparently accounted for by differences in genotype in the an interval defined by the marker; P, the point-wise probability that the linkage is a false positive. Add and Dom are estimates of the additive and dominance effects of genetic variation. Units are the same as those of the traits (volume in mm3 or numbers of cells). The two bold loci marked with asterisks achieve genome-wide significance in this sample population. + +The strongest linkage was found between variation in striatal volume and an interval on chromosome 10 between the markers D10Mit194 at 29 cM and D10Mit209 at 49 cM. The likelihood ratio statistic - a value that can be read as a chi-square - peaks in this 20 cM interval at 17.5 and is associated with a P value of 0.00016 (Table 1), equivalent to a LOD score of 3.8 (Fig 4A). The genome-wide probability of achieving a linkage of this strength by chance is <0.05. This locus accounts for as much as a third of the total phenotypic variance in striatal volume and as much as 50% of the genotypic variance (h2 = 0.39). Alleles in this Chr 10 interval that are inherited from the BXD5 parental strain contribute to a significantly larger striatum than do alleles inherited from A/J. Mean bilateral volume corrected for shrinkage for the AA genotype at D10Mit186 (n = 11) is 25.3 ± 1.3 mm3 whereas that for AB and BB genotypes are 29.1 ± 0.7 mm3 and 30.0 ± 0.5 mm3 (n = 14 and 11), respectively. The insignificant difference between BB and AB genotypes suggests that the B allele is dominant. BXD5 is a recombinant inbred strain initially generated by crossing strains C57BL/6J and DBA/2J. Most of the proximal part of Chr 10 in BXD5 is derived from DBA/2J, but a short interval between 40 and 50 cM is derived exclusively from C57BL/6J. This C57BL/6J region corresponds to the peak LRS score. We estimate a single B allele inherited from the BXD5 parent increases striatal volume by approximately 2.0-2.5 mm3. + +Figure 4 + +Plots of LOD scores and LRS for each of the two traits. A. Plot for Striatal volume on Chr. 10. Peak values for the LRS are around 30 cM. B. Plot for striatal neuron number on Chr. 19. Peak values for the LRS are around 50 cM. + +The Chr 10 interval has an appreciable effect on brain size. Variance in brain weight minus that of the striatum is associated with an LRS of 14.2 in the same location between D10Mit106 and D10Mit186. Each B allele adds 20-30 mg to total brain weight. The Chr 10 locus clearly has pleiotropic effects on the CNS, but its effect on the striatum is more intense. Nonetheless, until we know more about the scope of effects, we have opted to give this Chr 10 locus a generic name, Brain size control 10a (Bsc10a). The specific striatal component of the Bsc10a was analyzed by mapping the residual striatal values that corrects for differences in brain volume. The specific effect of a B allele is reduced from 2.5 mm3 to 0.5-1.0 mm3, and the LRS is reduced to 6.9, a value which still has a point-wise probability of only 0.03, indicating a significant independent effect. + +We identified a second strong candidate interval on distal Chr 19 that may modulate striatal neuron number. The LRS peaks at 15.0 (a LOD of 3.26) at one of our more distal markers (D19Mit123, 51 cM, p = .00055). In mapping neuron number we actually used the residual cell population as a trait, and we are therefore confident that this interval has a selective, although not necessarily exclusive, effect on numbers of neurons in striatum (Fig 4B). Each B allele increases the population by approximately 200,000 cells. The AA genotype has an average residual population that is 116,000 less than the mean (i.e., a residual of -116,000; n = 12), the AB heterozygotes have an average of -8,000 neurons (n = 18), and the BB homozygotes have an average of 290,000 neurons (n = 6). Corresponding absolute numbers of striatal neurons for the three genotypes are 1.8, 1.9, and 2.2 million. The two-tailed genome-wide probability of this locus is at the threshold for declaring a QTL (p = 0.035 ± 0.01 two-tailed for an additive model and 0.08 ± 0.2 for a free model). No other chromosomal interval has an LRS score remotely as high as distal Chr 19. The next highest LRS value is only 7.2 on Chr 1 near D1Mit65 and has a point-wise probability that is 50 times higher than the Chr 19 interval. Given these findings we have given the distal chromosome 19 interval the name Striatal Neuron Number 19a (Stnn19a). Allelic differences in this interval account for up to 30% of the total variance in striatal neuron number. As the heritability of this trait is 0.64, this trait can be said to account for over 80% of the genetic variance. Residual neuron counts have a higher LRS than the total neuron counts (LRS of 15.0 vs. 11.9). This indicates that the Chr 19 interval is likely to have selective effect on the striatum. Consistent with this hypothesis, the LRS for brain weight on distal Chr 19 is under 1.0, and weights of all three genotypes average 480 ± 5 mg. Linkage on Chr 19 is not affected at all by remapping with control for the striatal volume locus on Chr 10. Thus, Chr 10 and Chr 19 intervals do not interact or cooperate in controlling striatal volume or neuron number. + +Discussion + +Striatal volume correlates strongly to brain weight. Nonetheless, a significant fraction of the variation in both striatal volume and neuron number among inbred strains of mice can not be predicted on the basis of brain weight or volume. This non-predictable variation is of particular interest to us because it is generated in large part by genes that have more intense or even selective effects on the dorsal striatum than other brain regions. We have succeeded in mapping one QTL with somewhat more intense effects on the volume of the striatum than the rest of the brain to the proximal half of chromosome 10. We have also mapped a QTL with selective effects on number of neurons in the striatum to the distal end of chromosome 19. + +Between-strain variability + +Variation in the size of CNS regions and cell populations is already known to be substantial in the striatum and in many other regions of the CNS. The number of striatal cholinergic neurons, for example, varies 50% among 26 BXD RI lines [32]. Interestingly, this variation appears to be unrelated to susceptibility to haloperidol-induced catalepsy. The volume of the granule cell layer of the dentate gyrus varies as much as 40-80% among different inbred strains of mice [33-35]. More recent experiments using stereologic techniques have reported substantial variation in both neuron number and volume of the pyramidal and dentate cell layers of the hippocampus [36]. Granule cell numbers in NZB/BINJ and DBA/2 were 37-118% greater than C57BL/6J mice, and differences in volume were even larger (up to 150% larger in the DBA/2 as compared to the C57BL/6J mice). There is also substantial among-strain variation in other structures in the nervous system including the nucleus of the solitary tract [37], the spinal nucleus of the bulbocavernosus [38], and retinal ganglion cells [39, 40]. Taken together, these results point to a high level of variability in neuron number in the CNS of mice. + +Based on these findings, we anticipated significant differences in the striatum of inbred strains. We did find large strain differences in volume. What was surprising was that in our set of five highly divergent strains the differences in volume were not matched by significant differences in neuron number. There was in fact a strong inverse relationship between striatal volume and neuron-packing density that led to a remarkably stabile neuron number. The variation in neuron-packing density with volume contrasts somewhat with the report of Abusaad and colleagues [36], who found no significant differences (P = .06) in neuronal packing density in the dentate gyrus cell layers of the hippocampus among the three mouse strains that they examined, but did see a significant difference in the pyramidal cell layers. A recent report demonstrates a 25% range of granule cell packing density among 35 BXD recombinant inbred lines [41], a finding supporting the notion that packing density varies significantly among mouse strains. + +These data suggest that principles that govern the relationship between neuronal volume and neuron-packing density may differ between the striatum and the other CNS regions. The striatum may be a special case - a region in which numbers of medium spiny neurons is more tightly regulated than neuron populations in some other regions. It could also be that measuring specific neuronal subtypes would demonstrate a greater amount of variance than we currently report [32]. Given the relatively small number of strains that we have sampled, our hypothesis of lower variation in striatal cell populations requires a more extensive test, a problem which we are now pursuing using the large numbers of strains in the Mouse Brain Library . + +Verification of QTL Results + +We have quantified the population of striatal neurons on both sides of the brain in 77 cases total. This is a large sample from the perspective of stereological analysis of the mouse CNS, but from the perspective of gene mapping and quantitative genetics this is, of course, a modest-sized sample size and one that will need to be treated as a starting point for more refined genetic analysis. Nonetheless, we have succeeded in mapping one locus, Bsc10a, which modulates striatal volume with a genome-wide significance of P < 0.05. We have also discovered linkage on Chr 19 to variation in the total number of striatal neurons. These mapping data are concordant with our strain comparison and collectively suggest that there is apparently no significant genetic correlation between striatal volume and neuron number. To confirm and refine our genetic dissection of the striatum we plan to analyze the AXB and BXA recombinant inbred (RI) strains generated by crossing A/J with C57BL/6J. This large RI set has already been processed and regenotyped and is now part of the Mouse Brain Library (see and ). An analysis of RI strains can be quickly extended by generating F1 intercrosses between A/J and the subset of RI strains that have recombinations in the QTL intervals on Chrs 10 and 19. Isogenic sets of RI-backcross progeny can be used to test specific models of gene action, for example, the dominance of the B allele at Bsc10a. + +A major goal of QTL mapping is to define loci that affect critical phenotypes with sufficient precision to generate short lists of candidate genes. Generating lists of candidates for QTLs will soon be greatly facilitated by more complete and better annotated mouse and human sequence databases combined with information on gene expression profiles of whole brain and striatum [42]. Once chromosomal positions of the QTLs have been determined to a precision of 1-3 cM, reducing the probability that a QTL actually represents a cluster of linked genes, it will become appropriate to assess strengths of candidates using transgenic animals and by sequence comparisons [43]. + +Interval mapping places the QTL for Bsc10a in the central portion of Chr 10 in proximity with a number of genes known to affect brain development. One of these is Grk2, a member of the family of ionotropic glutamate receptor genes that is thought to play a role in modulating Huntington disease [44]. In the mouse, members of this receptor type act to indirectly down-regulate synaptic activity in the striatum [45]. Another gene that falls into the Bsc10a interval is Macs, the gene encoding the myristoylated alanine-rich C kinase substrate (MARCKS protein). This molecule is important in cerebral development. MARCKS-deficient mice have a high incidence of exencephaly, agenesis of the corpus callosum, and abnormalities other forebrain structure including widespread neocortical ectopias [46, 47]. The MARCKS-related protein gene is expressed in the striatum during early brain development in the rat [48]. + +The location of the QTL modulating striatal neuron number to the distal part of chromosome 19 places it in proximity to a number of genes that have been recently been shown to be important factors in telencephalic development, particularly Vax1. Vax1 is a homeobox-containing gene and is a close relative of the Emx and Not genes. Vax1 is localized during development to the anterior ventral forebrain, and is expressed in the striatum during embryogenesis [28]. This molecule also has an important role in axon guidance: both the anterior portion of the corpus callosum and the optic chiasm are malformed or absent in Vax1 knockout mice [49]. In addition, Vax1 interacts with several molecules including sonic hedgehog,Pax2, Pax6, and Rx that are known to be important during development of the basal forebrain [27, 50]. + +Brain volume and neuron number + +It has previously been shown that differences in brain weight are proportional to total brain DNA content and consequently to total CNS cell number [51, 52]. For this reason, brain weight has been suggested to be a good surrogate measure for total cell number in mice, as in humans [53]. Moreover, previous work has demonstrated a tight link between regional brain volume and neuron number [54, 55], which implies that volumetric measures reliably estimate neuron number. With this literature in mind, we expected that our measures of striatal volume would predict neuron number in this nucleus. With the inbred strains, however, we found that strains with small striata (A/J) had virtually the same number of neurons as those with large striata (BALB/cJ). This result indicates that at least for the striatum, volume is not a reliable indicator of neuron number, and that they may be two independent traits. This conclusion is bolstered at the genetic level by our report of two distinct QTLs for these two morphologic phenotypes. Taken together with previous reports [51-53], we speculate that while total neuron number in the cerebrum may relate to total brain weight, the relationship of these two variables is flexible at the regional level. + +Materials and Methods + +Subjects + +Thirty-four of the 78 mice that we analyzed were common inbred strains that were selected to sample a wide range of brain weights, and by expectation, striatal volumes. Low brain weight strains included A/J (n = 5) and DBA/2J (n = 8). Mid and high brain weight strains include C57BL/6J (n = 10), BALB/cJ (n = 5), and BXD5 (n = 6, formally this recombinant inbred strain is known as BXD-5/Ty). One of the ten C57BL/6J subjects was removed from the analysis because values for striatal neuron number were anomalous with Z scores more than 2.5. + +To map QTLs that modulate variation in CNS size and cell populations we used an F2 intercross between a strain with low brain weight (A/J) and a strain with high brain weight (BXD5). A total of 518 of these ABDF2 progeny were generated, but for this study we selected a subset of 44 cases, of which 36 were fully genotyped (see below). The sample included 20 animals in the lowest and highest quartiles, and 24 cases within 0.5 SD of the mean brain weight. We therefore measured subjects representing the full range of brain weights (see Fig 2A). The ABDF2 intercross has been used previously to map QTLs that modulate total brain weight [56] and cerebellar volume [57]. The BXD5 strain used as the paternal strain in this intercross is a recombinant inbred strain that was derived by crossing C57BL/6J and DBA/2J lines of mice [58]. As a result, ABDF2 progeny are a mixture of three genomes (50% A/J, 25% C57BL/6J, and 25% DBA/2J). However, at any given locus there will be only two alleles, A and B, or A and D. All stocks of mice were obtained from the Jackson Laboratory . ABF2 mice were generated at the University of Tennessee by Dr. Richelle Strom [56] using Jackson Laboratory foundation stock. The F2 mice ranged in age from 35 to 143 days. The standard inbred strains ranged in age from 51 to 365 days. We studied approximately equal numbers of males and females. + +Histological Preparation + +All brains analyzed in this study are part of the Mouse Brain Library (MBL). The MBL is both a physical and Internet resource. High-resolution digital images of sections from all cases are available at . + +Mice were anesthetized deeply with Avertin (1.25% 2,2,2-tribromoethanol and 0.8% tert-pentyl alcohol in water, 0.5-1.0 ml ip) and perfused through the left ventricle with 0.9% sodium phosphate buffered (PB) saline (pH 7.4) followed by 1.25% glutaraldehyde/1.0% paraformaldehyde in 0.1 M PB (pH 7.40) over a period of 2 to 4 min. An additional 10-ml of double-strength fixative (2.5% glutaraldehyde/2.0% paraformaldehyde) was injected for 1 to 2 min at an increased flow rate. The head with brain was placed a vial with the last fixative and stored at 4°C until dissection. + +Following dissection, the brains were weighed immediately. Brains were subsequently shipped to Beth Israel Deaconess Medical Center. They were immersed in fresh 10% formalin for at least one week before being embedding in celloidin [59]. Brains were cut on a sliding microtome at 30 μm in either horizontal or coronal planes. Free-floating sections were stained with cresylechtviolett and four series of every tenth section were mounted on slides and coverslipped (see for further details). + +Histologic Phenotypes + +Total Brain Volume + +To accurately estimate histological shrinkage for each brain in the sample, we determined the volume of the entire brain and took a ratio of this value to the original fixed brain weight. Brain volumes were determined from serial sections using point counting and Cavalieri's rule. High-resolution (4.5 μm/pixel) images of entire sections were taken from the Mouse Brain Library, and point counting was performed on these images using NIH Image 1.55 and an Apple Macintosh computer . If the criteria for using the Cavalieri's estimator were not met (due to missing or damaged sections), a measurement method involving piecewise parabolic integration was employed [60]. Subsequent measurements of striatal volume and neuron packing density were corrected for volumetric shrinkage. The average shrinkage was 62.2 ± 0.4% (a mean residual volume of 37.8%). + +Striatal Volume + +Volume of the striatum was also determined from serial section analysis using point counting and Cavalieri's rule. Images from the sections were captured at 12.5 x and were projected onto a video monitor. Point counting was performed as above. Volume was computed separately for the right and left sides and corrected for shrinkage. + +Striatal Neuron-Packing Density and Neuron Number + +Neurons were counted using the 3-dimensional counting software of Williams and Rakic [24]. A series of six contiguous counting boxes (each 40 x 65 x 20 μm) aligned in a 3 x 2 matrix were placed randomly within the striatum, and those neurons the nucleoli of which were in focus were counted as described previously [61, 62]. This large functional counting box (80 x 195 x 20 μm) was chosen to minimize sampling variance by ensuring an equitable sampling of striatal patch and matrix. Two of these large fields were counted in each of the hemispheres. Neuron-packing density was computed as the number of cells/mm3 corrected for shrinkage. Multiplying the volume of the striatum by its cell-packing density permitted estimation of the number of neurons in that nucleus. + +Reliability + +We determined test-retest reliability by having an observer blindly re-measure striatal volume on a subset of 10 brains from the collection. The observer not only re-measured the striatal volume from the same series of sections as the original measure, but also estimated volume from a second series of 1 in 10 sections offset by 5 sections from the previous series. The correlations among the three estimations ranged from .95 to .99 (P < .05), indicating a high degree of reliability for this dependent variable. + +We assessed reliability of our estimates of neuronal numbers by having an observer blindly re-estimate neuron number in the same 10 brains above. The intra-observer correlation for this measure was .81 (P < .05), which is similar to the reliability seen in previous estimates of neuron number [39, 40]. + +Genotyping and QTL Mapping + +Genomic DNA was extracted from spleens of F2 animals using a high-salt procedure [63]. A set of 82 microsatellite loci distributed across all autosomes and the X chromosome were typed in a set of ABDF2 animals using a standard PCR protocol [64, 65] as detailed in Zhou and Williams [66]. F2 genotypes were entered into a spreadsheet program and transferred to Map Manager QTb28 for mapping and permutation analysis [67]. Map Manager implements both simple and composite interval mapping methods described by Haley and Knott [68]. Two-tailed genome-wide significance levels were estimated by comparing the highest likelihood ratio statistic (LRS) of correctly ordered data sets with LRSs computed for 10,000 permutations of those same data sets [69]. LRS scores can be converted to LOD scores by dividing by 4.6. The 2-LOD support interval of linkage was estimated directly from interval maps. The approximate 95% support interval was estimated by application of equations in Darvasi and Soller [70]. With a modest sample size such as we have been able to examine using unbiased stereological methods, even a QTL responsible for 30 to 50% of the variance. is associated with a 95% interval of 20 to 30 cM. + +Regression Analysis of Trait Values + +The unadjusted striatal estimates vary to a large extent as a result of variation in total brain weight. However, one of our goals in this study is to map QTLs with relatively intense effects on the striatum. For this reason we also have corrected all of the parameters used in the mapping analysis for variation in brain weight using linear regression analysis. We have mapped data with and without compensation for variance in brain weight. The corrected values are referred to as residuals. + +Analysis + +All data were analyzed using regression, correlation, and ANOVA statistical tests (see StrAnatData.xls for original data used to perform this analysis). A Bonferroni/Dunn correction was used for post hoc examination of significant main effects in the ANOVA. This post-hoc test is functionally identical to a Fisher PLSD, but the alpha level is more conservative (.005). + +Supplementary Material + +StrAnatData.xls + +This file contains anatomic data for each of the subjects used in the current experiment. + +Click here to download StrAnatData.xls + +StrMap.qtx + +This file contains the genotyping data from the 82 markers used in the current experiment, in MapManager QTX format. + +Click here to download StrMap.qtx + +Acknowledgements + This work was supported, in part, by grants HD20806 and NS35485 from the Public Health Service of the USA. The authors wish to thank Dr. Jing Gu, Aaron Levine, Anna Ohlis, and Stefany Palmieri for technical assistance. We thank Richelle Strom for generating the F2 intercross mice. \ No newline at end of file diff --git a/src/test/resources/test_load_old_coreference/Ontologies/test.owl b/src/test/resources/test_load_old_coreference/Ontologies/test.owl index 3aa323c0..e7ce0f40 100644 --- a/src/test/resources/test_load_old_coreference/Ontologies/test.owl +++ b/src/test/resources/test_load_old_coreference/Ontologies/test.owl @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - #IDENTITY_chain - IDENTITY chain - - - - #NOUN_PHRASE - Noun Phrase - - - - - - - + + + + + + + + + + + + + + + + #IDENTITY_chain + IDENTITY chain + + + + #NOUN_PHRASE + Noun Phrase + + + + + + + diff --git a/src/test/resources/test_load_old_coreference/Profiles/CCP Colorado Computational Pharmacology, UC Denver.xml b/src/test/resources/test_load_old_coreference/Profiles/CCP Colorado Computational Pharmacology, UC Denver.xml index b4c86bb4..bd57b5b4 100644 --- a/src/test/resources/test_load_old_coreference/Profiles/CCP Colorado Computational Pharmacology, UC Denver.xml +++ b/src/test/resources/test_load_old_coreference/Profiles/CCP Colorado Computational Pharmacology, UC Denver.xml @@ -1,13 +1,13 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/src/test/resources/test_load_old_coreference/Profiles/Default.xml b/src/test/resources/test_load_old_coreference/Profiles/Default.xml index b4c86bb4..bd57b5b4 100644 --- a/src/test/resources/test_load_old_coreference/Profiles/Default.xml +++ b/src/test/resources/test_load_old_coreference/Profiles/Default.xml @@ -1,13 +1,13 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/src/test/resources/test_load_old_coreference/Profiles/gold.xml b/src/test/resources/test_load_old_coreference/Profiles/gold.xml index b4c86bb4..bd57b5b4 100644 --- a/src/test/resources/test_load_old_coreference/Profiles/gold.xml +++ b/src/test/resources/test_load_old_coreference/Profiles/gold.xml @@ -1,13 +1,13 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/src/test/resources/test_load_old_coreference/test_load_old_coreference.knowtator b/src/test/resources/test_load_old_coreference/test_load_old_coreference.knowtator index 8b137891..d3f5a12f 100644 --- a/src/test/resources/test_load_old_coreference/test_load_old_coreference.knowtator +++ b/src/test/resources/test_load_old_coreference/test_load_old_coreference.knowtator @@ -1 +1 @@ - + diff --git a/src/test/resources/test_project/Annotations/brat_test.ann b/src/test/resources/test_project/Annotations/brat_test.ann index 257f50c8..36fbd056 100644 --- a/src/test/resources/test_project/Annotations/brat_test.ann +++ b/src/test/resources/test_project/Annotations/brat_test.ann @@ -1,3 +1,3 @@ -T0 class_1 10 14;15 24 Class 1 -T1 class_0 0 4 Class 0 +T0 class_1 10 14;15 24 Class 1 +T1 class_0 0 4 Class 0 R0 property_0 Arg1:T1 Arg2:T0 \ No newline at end of file diff --git a/src/test/resources/test_project/Articles/brat_test.txt b/src/test/resources/test_project/Articles/brat_test.txt index 2521761f..92710838 100644 --- a/src/test/resources/test_project/Articles/brat_test.txt +++ b/src/test/resources/test_project/Articles/brat_test.txt @@ -1,10000 +1,10000 @@ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZ -ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ABCDEFGHIJKLMNOPQRSTUVWXYZA