diff options
Diffstat (limited to 'org.eclipse.osee.define/src/org')
36 files changed, 4438 insertions, 0 deletions
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/DefinePerspectiveFactory.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/DefinePerspectiveFactory.java new file mode 100644 index 00000000000..de04318572a --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/DefinePerspectiveFactory.java @@ -0,0 +1,70 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define; + +import org.eclipse.osee.define.navigate.DefineNavigateView; +import org.eclipse.osee.framework.ui.skynet.ArtifactExplorer; +import org.eclipse.osee.framework.ui.skynet.branch.BranchView; +import org.eclipse.osee.framework.ui.skynet.history.RevisionHistoryView; +import org.eclipse.osee.framework.ui.skynet.queryLog.QueryLogView; +import org.eclipse.osee.framework.ui.skynet.search.QuickSearchView; +import org.eclipse.search.ui.NewSearchUI; +import org.eclipse.ui.IFolderLayout; +import org.eclipse.ui.IPageLayout; +import org.eclipse.ui.IPerspectiveFactory; + +/** + * Perspective factory for the Define perspective. This sets up the initial layout and placeholders for views. + * + * @author Robert A. Fisher + */ +public class DefinePerspectiveFactory implements IPerspectiveFactory { + + public void createInitialLayout(IPageLayout layout) { + // Get the editor area. + String editorArea = layout.getEditorArea(); + + // Add views to Window -> Show View + layout.addShowViewShortcut(ArtifactExplorer.VIEW_ID); + layout.addShowViewShortcut(BranchView.VIEW_ID); + layout.addShowViewShortcut(QueryLogView.VIEW_ID); + layout.addShowViewShortcut(QuickSearchView.VIEW_ID); + layout.addShowViewShortcut(DefineNavigateView.VIEW_ID); + layout.addShowViewShortcut("org.eclipse.pde.runtime.LogView"); + + // Top left: Artifact Explorer + IFolderLayout topLeft = layout.createFolder("topLeft", IPageLayout.LEFT, 0.25f, editorArea); + topLeft.addView(ArtifactExplorer.VIEW_ID); + topLeft.addView(DefineNavigateView.VIEW_ID); + + IFolderLayout lower = layout.createFolder("bottom", IPageLayout.BOTTOM, 0.65f, editorArea); + lower.addView(BranchView.VIEW_ID); + lower.addPlaceholder(RevisionHistoryView.VIEW_ID); + lower.addPlaceholder(NewSearchUI.SEARCH_VIEW_ID); + lower.addPlaceholder("org.eclipse.pde.runtime.LogView"); + + IFolderLayout underLower = layout.createFolder("underBottom", IPageLayout.BOTTOM, .75f, "bottom"); + underLower.addView(QuickSearchView.VIEW_ID); + + // The following is some sample code that can be used for future reference for other areas and + // placeholders ... + // topLeft.addPlaceholder(IPageLayout.ID_BOOKMARKS); + // + // // Bottom left: Outline view and Property Sheet view + // IFolderLayout bottomLeft = layout.createFolder("bottomLeft", IPageLayout.BOTTOM, 0.50f, + // "topLeft"); + // bottomLeft.addView(IPageLayout.ID_OUTLINE); + // bottomLeft.addView(IPageLayout.ID_PROP_SHEET); + // + // // Bottom right: Task List view + // layout.addView(IPageLayout.ID_TASK_LIST, IPageLayout.BOTTOM, 0.66f, editorArea); + } +}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/DefinePlugin.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/DefinePlugin.java new file mode 100644 index 00000000000..7715bea43e7 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/DefinePlugin.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define; + +import org.eclipse.osee.framework.ui.plugin.OseeUiActivator; + +public class DefinePlugin extends OseeUiActivator { + private static DefinePlugin pluginInstance; // The shared instance. + public static final String PLUGIN_ID = "org.eclipse.osee.define"; + + public DefinePlugin() { + super(); + pluginInstance = this; + } + + /* (non-Javadoc) + * @see org.eclipse.osee.framework.jdk.core.util.plugin.OseePlugin#getPluginName() + */ + @Override + protected String getPluginName() { + return PLUGIN_ID; + } + + /** + * Returns the shared instance. + */ + public static DefinePlugin getInstance() { + return pluginInstance; + } +}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/Resolver.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/Resolver.java new file mode 100644 index 00000000000..07f4e13e971 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/Resolver.java @@ -0,0 +1,54 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.artifact; + +import java.io.CharArrayReader; +import java.nio.CharBuffer; +import javax.xml.transform.Source; +import javax.xml.transform.TransformerException; +import javax.xml.transform.URIResolver; +import javax.xml.transform.stream.StreamSource; +import org.eclipse.osee.define.DefinePlugin; +import org.eclipse.osee.framework.ui.plugin.OseeUiActivator; + +public class Resolver implements URIResolver { + private static final OseeUiActivator plugin = DefinePlugin.getInstance(); + private static final CharBuffer xslAuxiliary = plugin.getCharBuffer("support/xslt/auxiliary.xsl"); + private static final CharBuffer xslProperties = plugin.getCharBuffer("support/xslt/elementProperties.xsl"); + private static final CharBuffer xslStructure = plugin.getCharBuffer("support/xslt/elementStructure.xsl"); + private static final CharBuffer xslPageLayout = plugin.getCharBuffer("support/xslt/pageLayout.xsl"); + private static final CharBuffer xslProfile = plugin.getCharBuffer("support/xslt/profile.xsl"); + + /* + * (non-Javadoc) + * + * @see javax.xml.transform.URIResolver#resolve(java.lang.String, java.lang.String) + */ + public Source resolve(String href, String base) throws TransformerException { + CharBuffer rightOne = null; + if (href.equals("auxiliary.xsl")) { + rightOne = xslAuxiliary; + } + if (href.equals("elementProperties.xsl")) { + rightOne = xslProperties; + } + if (href.equals("elementStructure.xsl")) { + rightOne = xslStructure; + } + if (href.equals("pageLayout.xsl")) { + rightOne = xslPageLayout; + } + if (href.equals("profile.xsl")) { + rightOne = xslProfile; + } + return new StreamSource(new CharArrayReader(rightOne.array())); + } +}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/Spreadsheet.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/Spreadsheet.java new file mode 100644 index 00000000000..301ff971b99 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/Spreadsheet.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.artifact; + +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType; +import org.eclipse.osee.framework.skynet.core.artifact.Branch; + +/** + * @author Ryan D. Brooks + */ +public class Spreadsheet extends Artifact { + + /** + * @param parentFactory + * @param guid + * @param humanReadableId + * @param branch + */ + public Spreadsheet(ArtifactFactory parentFactory, String guid, String humanReadableId, Branch branch, ArtifactType artifactType) { + super(parentFactory, guid, humanReadableId, branch, artifactType); + } + +} diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/SpreadsheetArtifactFactory.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/SpreadsheetArtifactFactory.java new file mode 100644 index 00000000000..a53ab296513 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/artifact/SpreadsheetArtifactFactory.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.artifact; + +import org.eclipse.osee.framework.db.connection.exception.OseeCoreException; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType; +import org.eclipse.osee.framework.skynet.core.artifact.Branch; + +/** + * @author Ryan D. Brooks + */ +public class SpreadsheetArtifactFactory extends ArtifactFactory { + private static SpreadsheetArtifactFactory factory = null; + + private SpreadsheetArtifactFactory(int factoryId) { + super(factoryId); + } + + public static SpreadsheetArtifactFactory getInstance(int factoryId) { + if (factory == null) { + factory = new SpreadsheetArtifactFactory(factoryId); + } + return factory; + } + + public static SpreadsheetArtifactFactory getInstance() { + return factory; + } + + @Override + public Spreadsheet getArtifactInstance(String guid, String humandReadableId, String factoryKey, Branch branch, ArtifactType artifactType) throws OseeCoreException { + return new Spreadsheet(this, guid, humandReadableId, branch, artifactType); + } +}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/AddEveryoneGroupToBranches.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/AddEveryoneGroupToBranches.java new file mode 100644 index 00000000000..b2223d10a17 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/AddEveryoneGroupToBranches.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.blam.operation; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.osee.framework.skynet.core.access.AccessControlManager; +import org.eclipse.osee.framework.skynet.core.access.PermissionEnum; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.Branch; +import org.eclipse.osee.framework.skynet.core.artifact.BranchManager; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; +import org.eclipse.osee.framework.ui.skynet.blam.VariableMap; +import org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam; + +/** + * @author Jeff C. Phillips + */ +public class AddEveryoneGroupToBranches extends AbstractBlam { + /* (non-Javadoc) + * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor) + */ + public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception { + for (Branch brnch : BranchManager.getNormalBranches()) { + + if (!AccessControlManager.getInstance().getAccessControlList(brnch).isEmpty()) { + Artifact everyone = + ArtifactQuery.getArtifactFromAttribute("Name", "Everyone", BranchManager.getCommonBranch()); + AccessControlManager.getInstance().setPermission(everyone, brnch, PermissionEnum.READ); + } + } + } +}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/ChangeArtifactType.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/ChangeArtifactType.java new file mode 100644 index 00000000000..d164a0876dd --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/ChangeArtifactType.java @@ -0,0 +1,181 @@ +/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.blam.operation;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Collections;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.skynet.core.attribute.AttributeType;
+import org.eclipse.osee.framework.skynet.core.attribute.TypeValidityManager;
+import org.eclipse.osee.framework.skynet.core.event.OseeEventManager;
+import org.eclipse.osee.framework.skynet.core.relation.RelationLink;
+import org.eclipse.osee.framework.skynet.core.relation.RelationTypeManager;
+import org.eclipse.osee.framework.skynet.core.utility.LoadedArtifacts;
+import org.eclipse.osee.framework.ui.plugin.util.Displays;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * Changes the descriptor type of an artifact to the provided descriptor.
+ *
+ * @author Jeff C. Phillips
+ */
+public class ChangeArtifactType extends AbstractBlam {
+ private List<Attribute<?>> attributesToPurge;
+ private List<RelationLink> relationsToDelete;
+
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ processChange(variableMap.getArtifacts("artifacts"),
+ variableMap.getArtifactType("New Artifact Type"));
+ }
+
+ /**
+ * Changes the descriptor of the artifacts to the provided artifact descriptor
+ *
+ * @param artifacts
+ * @param descriptor
+ */
+ private void processChange(List<Artifact> artifacts, ArtifactType descriptor) throws Exception {
+ if (artifacts.isEmpty()) {
+ throw new IllegalArgumentException("The artifact list can not be empty");
+ }
+
+ for (Artifact artifact : artifacts) {
+ processAttributes(artifact, descriptor);
+ processRelations(artifact, descriptor);
+
+ if (doesUserAcceptArtifactChange(artifact, descriptor)) {
+ changeArtifactType(artifact, descriptor);
+ }
+ }
+
+ // Kick Local and Remote Events
+ OseeEventManager.kickArtifactsChangeTypeEvent(this, descriptor.getArtTypeId(), new LoadedArtifacts(artifacts));
+ }
+
+ /**
+ * Splits the attributes of the current artifact into two groups. The attributes that are compatable for the new type
+ * and the attributes that will need to be purged.
+ *
+ * @param artifact
+ * @param descriptor
+ */
+ private void processAttributes(Artifact artifact, ArtifactType descriptor) throws OseeCoreException {
+ attributesToPurge = new LinkedList<Attribute<?>>();
+
+ Collection<AttributeType> attributeTypes =
+ TypeValidityManager.getAttributeTypesFromArtifactType(descriptor, artifact.getBranch());
+
+ for (AttributeType attributeType : artifact.getAttributeTypes()) {
+ if (!attributeTypes.contains(attributeType)) {
+ attributesToPurge.addAll(artifact.getAttributes(attributeType.getName()));
+ }
+ }
+ }
+
+ /**
+ * Splits the relationLinks of the current artifact into Two groups. The links that are compatable for the new type
+ * and the links that will need to be pruged.
+ *
+ * @param artifact
+ * @param artifactType
+ */
+ private void processRelations(Artifact artifact, ArtifactType artifactType) {
+ relationsToDelete = new LinkedList<RelationLink>();
+
+ for (RelationLink link : artifact.getRelationsAll(false)) {
+ if (RelationTypeManager.getRelationSideMax(link.getRelationType(), artifactType, link.getSide(artifact)) == 0) {
+ relationsToDelete.add(link);
+ }
+ }
+ }
+
+ /**
+ * @param artifact
+ * @param descriptor
+ * @return true if the user accepts the purging of the attributes and relations that are not compatible for the new
+ * artifact type else false.
+ */
+ private boolean doesUserAcceptArtifactChange(final Artifact artifact, final ArtifactType descriptor) {
+ if (!relationsToDelete.isEmpty() || !attributesToPurge.isEmpty()) {
+ ArtifactChangeMessageRunnable messageRunnable = new ArtifactChangeMessageRunnable(artifact, descriptor);
+ Displays.ensureInDisplayThread(messageRunnable, true);
+ return messageRunnable.isAccept();
+ } else {
+ return true;
+ }
+ }
+
+ private class ArtifactChangeMessageRunnable implements Runnable {
+ private boolean accept = false;
+ private final Artifact artifact;
+ private final ArtifactType descriptor;
+
+ public ArtifactChangeMessageRunnable(Artifact artifact, ArtifactType descriptor) {
+ this.artifact = artifact;
+ this.descriptor = descriptor;
+ }
+
+ public void run() {
+ accept =
+ MessageDialog.openQuestion(
+ Display.getCurrent().getActiveShell(),
+ "Confirm Artifact Type Change ",
+ "There has been a conflict in changing " + artifact.getDescriptiveName() + " to " + descriptor.getName() + " type. \n" + "The following data will need to be purged " + (relationsToDelete.isEmpty() ? "" : Collections.toString(
+ relationsToDelete, ":", ",", null)) + (attributesToPurge.isEmpty() ? "" : Collections.toString(
+ attributesToPurge, ":", ",", null)));
+ }
+
+ /**
+ * @return Returns the accept.
+ */
+ public boolean isAccept() {
+ return accept;
+ }
+ };
+
+ /**
+ * Sets the artifact descriptor.
+ *
+ * @param artifact
+ * @param descriptor
+ * @throws OseeCoreException
+ */
+ private void changeArtifactType(Artifact artifact, ArtifactType descriptor) throws OseeCoreException {
+ for (Attribute<?> attribute : attributesToPurge) {
+ attribute.purge();
+ }
+
+ for (RelationLink relation : relationsToDelete) {
+ relation.delete(true);
+ }
+
+ artifact.changeArtifactType(descriptor);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ @Override
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XListDropViewer\" displayName=\"artifacts\" /><XWidget xwidgetType=\"XArtifactTypeListViewer\" displayName=\"New Artifact Type\" /></xWidgets>";
+ }
+}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidArtifactTypes.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidArtifactTypes.java new file mode 100644 index 00000000000..da8397c2f9f --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidArtifactTypes.java @@ -0,0 +1,31 @@ +/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.blam.operation;
+
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class CheckValidArtifactTypes extends CheckValidType {
+ private static final String CHECK_SQL =
+ "SELECT t1.*, t3.gamma_id, t4.* FROM osee_artifact t1, osee_artifact_version t2, osee_txs t3, osee_tx_details t4 WHERE t1.art_id = t2.art_id AND t2.gamma_id = t3.gamma_id AND t3.transaction_id = t4.transaction_id AND NOT EXISTS (SELECT 'x' FROM osee_artifact_type t5, osee_txs t6, osee_tx_details t7 WHERE t5.gamma_id = t6.gamma_id AND t6.transaction_id = t7.transaction_id AND t4.branch_id = t7.branch_id AND t1.art_type_id = t5.art_type_id)";
+
+ /**
+ * @param sql
+ * @param headers
+ * @param colNames
+ * @param logger
+ */
+ public CheckValidArtifactTypes() {
+ super(CHECK_SQL, new String[] {"art_id", "gamma_id", "transaction_id", "branch_id"}, new String[] {"Art ID",
+ "Gamma ID", "Transaction ID", "Branch ID"});
+ }
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidAttributeTypes.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidAttributeTypes.java new file mode 100644 index 00000000000..5184173b203 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidAttributeTypes.java @@ -0,0 +1,31 @@ +/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.blam.operation;
+
+
+/**
+ * @author Jeff C. Phillips
+ */
+public class CheckValidAttributeTypes extends CheckValidType {
+ private static final String CHECK_SQL =
+ "SELECT t2.*, t4.*, t10.guid, t10.human_readable_id, t10.art_type_id " + "FROM osee_attribute t2, " + "osee_txs t3, " + "osee_tx_details t4, " + "osee_artifact t10 " + "WHERE t2.gamma_id = t3.gamma_id " + "and t10.art_id = t2.art_id " + "AND t3.transaction_id = t4.transaction_id " + "AND NOT EXISTS " + "(SELECT 'x' " + "FROM osee_attribute_type t5, " + "osee_txs t6, " + "osee_tx_details t7 " + "WHERE t5.gamma_id = t6.gamma_id " + "AND t6.transaction_id = t7.transaction_id " + "AND t4.branch_id = t7.branch_id " + "AND t2.attr_type_id = t5.attr_type_id) order by attr_id";
+
+ /**
+ * @param sql
+ * @param headers
+ * @param colNames
+ * @param logger
+ */
+ public CheckValidAttributeTypes() {
+ super(CHECK_SQL, new String[] {"art_id", "attr_id", "attr_type_id", "gamma_id", "transaction_id", "branch_id"},
+ new String[] {"Art ID", "Attr ID", "Art Type ID", "Gamma ID", "Transaction ID", "Branch ID"});
+ }
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidType.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidType.java new file mode 100644 index 00000000000..e2497d8c11f --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/CheckValidType.java @@ -0,0 +1,70 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.blam.operation; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.LinkedList; +import java.util.List; +import java.util.TimeZone; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.osee.framework.db.connection.ConnectionHandler; +import org.eclipse.osee.framework.db.connection.ConnectionHandlerStatement; +import org.eclipse.osee.framework.jdk.core.util.AHTML; +import org.eclipse.osee.framework.ui.skynet.blam.VariableMap; +import org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam; +import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData; +import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultPage.Manipulations; + +/** + * @author Jeff C. Phillips + */ +public class CheckValidType extends AbstractBlam { + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy HH:mm"); + private final String sql; + private final String[] headers; + private final String[] colNames; + + /** + * @param sql + */ + public CheckValidType(final String sql, final String[] colNames, final String[] headers) { + super(); + this.sql = sql; + this.headers = headers; + this.colNames = colNames; + } + + /* (non-Javadoc) + * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor) + */ + public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception { + ConnectionHandlerStatement chStmt = new ConnectionHandlerStatement(); + try { + chStmt.runPreparedQuery(sql); + Calendar cal = Calendar.getInstance(TimeZone.getDefault()); + List<String> datas = new LinkedList<String>(); + XResultData rd = new XResultData(); + int count = 0; + while (chStmt.next()) { + for (String colName : colNames) { + datas.add(chStmt.getString(colName)); + } + count++; + } + rd.addRaw("Results: " + count + "<br></br>Date: " + dateFormat.format(cal.getTime()) + "<br></br><br></br>" + AHTML.createTable( + datas, headers, headers.length, 1, 3)); + rd.report("The report", Manipulations.RAW_HTML); + } finally { + chStmt.close(); + } + } +}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/ExperimentalBlam.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/ExperimentalBlam.java new file mode 100644 index 00000000000..cb469de7be0 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/ExperimentalBlam.java @@ -0,0 +1,26 @@ +/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.blam.operation;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class ExperimentalBlam extends AbstractBlam {
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ }
+}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/Gamma1.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/Gamma1.java new file mode 100644 index 00000000000..fafa9c56ba6 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/Gamma1.java @@ -0,0 +1,670 @@ +/*
+ * Created on Jun 13, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.define.blam.operation;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class Gamma1 {
+
+ public static void main(String[] args) {
+ Set<Integer> gammas = new HashSet<Integer>();
+ for (int i : gammaIds1) {
+ gammas.add(i);
+ }
+ for (int i : Gamma2.gammaIds2) {
+ gammas.add(i);
+ }
+ System.out.println(gammas.size());
+ System.out.println(Arrays.deepToString(gammas.toArray()));
+ }
+
+ public static final int[] gammaIds1 =
+ new int[] {177463, 177463, 177463, 177463, 177463, 177463, 177463, 177463, 177463, 1806392, 177463, 177463,
+ 177463, 177463, 177463, 177463, 852190, 1311395, 177463, 177463, 177463, 177463, 1508988, 1508988,
+ 177463, 177463, 177463, 177463, 177463, 177463, 177463, 177463, 177463, 177463, 177463, 852190, 852190,
+ 2078494, 1575288, 1575288, 1575288, 2078494, 1575288, 2078494, 1575288, 1575288, 2078494, 1575288,
+ 1575288, 1575288, 1575288, 1575288, 1575288, 1575288, 2078494, 1575288, 1575288, 2078494, 2078494,
+ 2078494, 1575288, 1575288, 2078494, 2078494, 1575288, 2078494, 2078494, 2078494, 1575288, 1575288,
+ 177463, 1575288, 1575288, 2078494, 2078494, 1575288, 1575288, 1575288, 1575288, 2078494, 1575288,
+ 1575288, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494,
+ 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494,
+ 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494, 2078494,
+ 2078494, 2078494, 2078494, 1575288, 2078494, 2078494, 1575288, 2078494, 2078494, 2078494, 2078494,
+ 1575288, 2078494, 2078494, 1575288, 1575288, 2078494, 2078494, 1575288, 2078494, 2078494, 2078494,
+ 2078494, 2078494, 2078494, 2078494, 2078494, 1575288, 2078494, 1575288, 2078494, 1575288, 2078494,
+ 2078494, 1575288, 1575288, 1575288, 2078494, 1575288, 1575288, 2078494, 2078494, 2078494, 1575288,
+ 2078494, 1575288, 2078494, 1575288, 2078494, 2078494, 1575288, 2078494, 1575288, 1575288, 1575288,
+ 1575288, 2078494, 2078494, 2078494, 2078494, 2078494, 1575288, 2078494, 1575288, 1575288, 2078494,
+ 1575288, 2078494, 2078494, 2078494, 1575288, 2078494, 1575288, 1575288, 2078494, 1575288, 1575288,
+ 2078494, 1575288, 1575288, 1575288, 1575288, 1575288, 1575288, 1575288, 1575288, 1575288, 1575288,
+ 1575288, 1575288, 1575288, 1575288, 2078494, 2078494, 1575288, 2078494, 1575288, 1575288, 2078494,
+ 1575288, 2078494, 1575288, 2078494, 2078494, 2078494, 1575288, 1575288, 1575288, 1575288, 2078494,
+ 1575288, 2078494, 1575288, 1575288, 1575288, 1575288, 1575288, 1575288, 2078494, 1575288, 2078494,
+ 1575288, 2078494, 1575288, 1575288, 1575288, 177454, 1806392, 1806392, 1806392, 1806392, 1806392,
+ 1806392, 1806392, 1806392, 1806392, 1806392, 1806392, 1806392, 1806392, 177454, 1806392, 1806392,
+ 177454, 177454, 1806392, 177454, 177454, 1806392, 1806392, 1806392, 177454, 1806392, 1806247, 1806392,
+ 177454, 177454, 1806392, 1806392, 1806392, 1806392, 1806392, 1806392, 1806392, 1806392, 1806392,
+ 1806392, 1806392, 1806392, 1575288, 1806392, 1806392, 1806392, 1575288, 1575288, 1806392, 1806392,
+ 1806392, 1575288, 1806392, 1806392, 1575288, 1575288, 1806392, 1806392, 1806392, 1806392, 1806392,
+ 1575288, 1575288, 1806392, 1806392, 1806392, 1806392, 1806392, 852191, 1806392, 1575288, 1806392,
+ 1575288, 852191, 1575288, 1575288, 1806392, 1806392, 1806392, 1806392, 1575288, 1806392, 1806392,
+ 1806392, 1806392, 1806392, 1806392, 1806392, 1575288, 1806392, 1806392, 1806392, 1806392, 1806392,
+ 1575288, 1806392, 1806392, 1806392, 177454, 1806392, 1806392, 177454, 177454, 1806392, 1806392, 1806392,
+ 1806392, 1806392, 1806392, 1806392, 177454, 177454, 177454, 177454, 1806392, 1806392, 177454, 177454,
+ 1806392, 1806392, 177454, 177454, 177454, 177454, 177454, 177454, 1806392, 1508988, 1806392, 1806392,
+ 1806392, 177454, 177454, 177454, 1508988, 1508988, 177454, 177454, 1508988, 1806392, 1508988, 177454,
+ 1806392, 177454, 1806392, 177454, 177454, 177454, 177454, 1806392, 177454, 1806392, 177454, 1806392,
+ 177454, 177454, 1806392, 1806392, 1806392, 177454, 177454, 1806392, 1806392, 1806392, 177454, 1806392,
+ 177454, 177454, 1806392, 177454, 177454, 1806392, 177454, 1806392, 177454, 1806392, 1806392, 177454,
+ 852191, 177454, 1806392, 177454, 1806392, 1806392, 177463, 1508988, 177463, 177463, 1508988, 177463,
+ 177463, 1508988, 1508988, 1508988, 1508988, 177463, 177454, 177463, 1508988, 177463, 1508988, 177463,
+ 177463, 1508988, 1508988, 1508988, 177463, 177463, 177463, 177463, 1508988, 1508988, 1508988, 177463,
+ 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1575288, 1508988, 1508988, 1508988,
+ 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988,
+ 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 1508988, 177463, 1508988,
+ 177463, 177463, 1508988, 1508988, 1508988, 1508988, 1508988, 1806454, 1508988, 1508988, 177463, 177463,
+ 1508988, 1508988, 1508988, 177463, 177463, 177463, 1508988, 177463, 177463, 177463, 1508988, 1508988,
+ 177463, 177463, 177463, 1508988, 177454, 177463, 1508988, 177463, 177463, 177463, 177463, 1508988,
+ 1508988, 177454, 1508988, 177463, 177463, 177463, 177463, 1508988, 1508988, 1508988, 177463, 1508988,
+ 177463, 177463, 1508988, 1508988, 177463, 177463, 177463, 177463, 177463, 1508988, 177463, 177463,
+ 177463, 1508988, 1508988, 1508988, 177463, 1508988, 1508988, 1508988, 177463, 177463, 177463, 177463,
+ 177463, 1508988, 177463, 177463, 1508988, 1508988, 177463, 1508988, 1508988, 1508988, 1508988, 177463,
+ 177463, 177463, 1508988, 1508988, 177463, 1508988, 177463, 1508988, 177463, 1508988, 1508988, 177463,
+ 177463, 177463, 177463, 177463, 1508988, 1508988, 1508988, 177463, 1508988, 177463, 1508988, 177463,
+ 1508988, 177463, 1508988, 1508988, 177463, 177463, 1508988, 177463, 177463, 1508988, 1508988, 1508988,
+ 1508988, 177463, 1508988, 177463, 177463, 1508988, 1508988, 177463, 177463, 177463, 177463, 1508988,
+ 177463, 177463, 1508988, 177463, 1508988, 177463, 177463, 177463, 1508988, 1508988, 1508988, 1806446,
+ 1806418, 1806418, 1806446, 1806418, 1806446, 1806446, 1806418, 1806418, 1806446, 1806446, 1806446,
+ 1806446, 1806446, 1806446, 1806418, 1806446, 1806446, 1806418, 1806446, 1806418, 1806446, 1806446,
+ 1806446, 1806446, 1806418, 1806418, 1806446, 1806446, 1806446, 1806418, 1806418, 1806446, 1806446,
+ 1806418, 1806418, 1806446, 1806418, 1806418, 1806446, 1806418, 1806418, 1806418, 1806418, 1806418,
+ 1806418, 1806418, 1806446, 1806418, 1806418, 1806446, 1806446, 1806446, 1806446, 1806418, 1806418,
+ 1806446, 1806418, 1806418, 1806446, 1806418, 1806446, 1806446, 1806446, 1806446, 1806446, 1806446,
+ 1806418, 1806418, 1806446, 1806446, 1806418, 1806446, 1806418, 1806446, 1806418, 1806446, 1806418,
+ 1806446, 1806418, 1806418, 1806418, 1806446, 1806446, 1806418, 1806446, 1806446, 1806418, 1806418,
+ 1806446, 1806418, 1806418, 1806446, 1806446, 1806418, 1806446, 1806446, 1806446, 1806418, 1806446,
+ 1806418, 1806418, 1806418, 1806446, 1806418, 1806446, 1806446, 1806446, 1806446, 1806418, 1806418,
+ 1806446, 1806418, 1806418, 1806418, 1806418, 1806418, 1806446, 1806446, 1806418, 1806446, 1806418,
+ 1806446, 1806446, 1806418, 1806418, 177453, 1806418, 1806418, 177453, 1806418, 1806418, 1806418, 177453,
+ 1806418, 177453, 1806418, 177453, 177453, 1806418, 177453, 177453, 1806418, 177453, 1806418, 177453,
+ 1806422, 177453, 177453, 1806418, 177453, 1806446, 177453, 1806418, 1806418, 177453, 1806446, 1806418,
+ 1806446, 1806446, 177453, 177453, 1806418, 1806418, 1806418, 177453, 1806418, 1806418, 1806418, 177453,
+ 1806418, 1806485, 177453, 1806418, 1806418, 1806485, 1806485, 1806418, 177453, 177453, 1806485, 177453,
+ 1806485, 1806418, 1806418, 177453, 1806485, 177453, 177453, 177453, 1806485, 177453, 1806485, 1806418,
+ 1806485, 177453, 1806418, 1806485, 177453, 1806418, 177453, 177453, 177453, 177453, 177453, 177453,
+ 177453, 177453, 1806418, 177453, 1806418, 1806418, 1806418, 1806418, 1806418, 1806418, 1806446, 1806418,
+ 1806446, 1806446, 1806418, 1806418, 1806446, 1806446, 1806446, 1806446, 1806446, 1806446, 177453,
+ 177453, 1806446, 177453, 177453, 177453, 177453, 1806446, 177453, 177453, 1806446, 177453, 1806446,
+ 177453, 1806446, 1806446, 1806446, 177453, 1806481, 1806446, 1806418, 1806418, 1806418, 1806418,
+ 1806418, 1806418, 1806418, 1806418, 1806418, 1508988, 1806418, 1806418, 1806418, 1806418, 1806418,
+ 1806418, 1806418, 1806418, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422,
+ 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422,
+ 1806422, 264757, 264757, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422,
+ 1806422, 1806422, 177453, 1806422, 1806422, 1806422, 1806422, 177453, 1806422, 1806422, 1806422,
+ 1806481, 1806422, 1806481, 1806481, 1806422, 1806422, 1806481, 1806422, 1806481, 1806422, 1806422,
+ 1806422, 1806481, 1806422, 1806422, 1806481, 1806422, 1806422, 1806422, 1806481, 1806422, 1806422,
+ 1806481, 1806422, 1806422, 1806422, 1806422, 1806422, 1806481, 1806422, 1806422, 1806481, 1806422,
+ 1806422, 1806422, 1806481, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422, 1806481, 1806422,
+ 1806422, 1806481, 1806422, 1806422, 1806481, 1806422, 1806422, 1806422, 1806422, 1806422, 1806422,
+ 1806422, 1806422, 1806422, 1806422, 2078494, 1806422, 1806422, 1806422, 1806422, 2078494, 1806422,
+ 1806422, 2078494, 2078494, 2078494, 2078494, 1806422, 2078494, 2078494, 2078494, 1806422, 1806422,
+ 264757, 177453, 1806481, 1806481, 1806481, 177453, 177453, 1806481, 177453, 1806481, 1806481, 1806481,
+ 177453, 177453, 1806481, 177453, 1806481, 1806481, 1806481, 1806481, 1806481, 1806481, 177453, 1806481,
+ 177453, 1806481, 1806481, 1806481, 177453, 1806481, 1806481, 177453, 177453, 1806481, 1806481, 177453,
+ 177453, 177453, 1806481, 177453, 1806481, 1806481, 1806481, 1806481, 1806481, 1806481, 1806481, 1806481,
+ 1806481, 1806481, 1806481, 177453, 1806481, 177453, 177453, 177453, 177453, 177453, 177453, 177453,
+ 177453, 1806481, 177453, 177453, 1806481, 177453, 177453, 1806481, 1806481, 177453, 1806481, 177453,
+ 1806481, 177453, 1806481, 177453, 1806481, 1806481, 177453, 177453, 177453, 177453, 177453, 177453,
+ 177453, 177453, 177453, 177453, 177453, 177453, 177453, 177453, 177453, 177453, 177453, 177453, 177453,
+ 177453, 177453, 177453, 177453, 1806481, 1806481, 1806422, 1806422, 1806422, 1806481, 1806481, 1806481,
+ 1806422, 1806422, 1806422, 1806481, 1806481, 1806481, 1806422, 1806481, 2078494, 1806422, 1806481,
+ 1806422, 1806481, 1806481, 1806481, 1806481, 1806481, 1806481, 1806481, 177453, 1806481, 1806481,
+ 1806481, 1806422, 1806481, 1806481, 1806481, 1806481, 1806481, 1806481, 1806481, 1806422, 1806481,
+ 1806481, 1806422, 1806422, 1806481, 1806481, 1806481, 1806422, 177453, 1806481, 1806481, 1806422,
+ 1806422, 177453, 1806481, 177453, 1806481, 1806481, 177453, 1806422, 177453, 1806481, 1806481, 1806422,
+ 1806481, 1806481, 1806422, 1806481, 177453, 1806422, 1806481, 1806422, 1806481, 1806422, 1806481,
+ 1806481, 1806481, 1806481, 1806481, 177453, 1806481, 1806481, 177453, 1806422, 1806481, 177453, 1806422,
+ 177453, 1806481, 1806481, 1806481, 1806481, 177453, 1806481, 1806422, 177453, 1806422, 1806422, 1806481,
+ 1806492, 1806904, 1806441, 1806466, 1806492, 1806466, 1806466, 1806492, 1806492, 1806466, 1806492,
+ 1806466, 1806466, 1806466, 1806466, 1806492, 1806492, 1806466, 1806466, 1806466, 1806492, 1806466,
+ 1806466, 1806466, 1806466, 1806492, 1806466, 1806492, 1806492, 1806466, 1806492, 1806466, 1806466,
+ 1806492, 1806466, 1806492, 1806466, 1806466, 1806492, 1806466, 1806492, 1806466, 1806466, 1806466,
+ 1806466, 1806492, 1806466, 1806466, 1806466, 1806466, 1806466, 1806466, 1806466, 1806466, 1806492,
+ 1806466, 1806492, 1806466, 1806466, 1806448, 1806448, 1806492, 1806492, 1806492, 1806492, 1806492,
+ 1806492, 1806492, 1806492, 1806448, 1806448, 1806466, 1806448, 1806466, 1806448, 1806448, 1806466,
+ 1806448, 1806448, 1806466, 1806466, 1806466, 1806466, 1806466, 1806448, 1806448, 1806448, 1806466,
+ 1806466, 1806466, 1806448, 1806466, 1806492, 1806492, 1611799, 1806466, 1806492, 1806492, 1611799,
+ 1611799, 1806492, 1611799, 1611799, 1806466, 1806492, 1611799, 1806466, 1806492, 1806466, 1806492,
+ 1806492, 1611799, 1806492, 1611799, 1611799, 1806492, 1806492, 1806492, 1806466, 1806492, 1806485,
+ 1806466, 1806492, 1806492, 1806492, 1806492, 1806466, 1611799, 1806904, 1806492, 1806466, 1611799,
+ 1806904, 1806492, 1806492, 1806904, 1806492, 1806492, 1806492, 1611799, 1611799, 1611799, 1611799,
+ 1806492, 1611799, 1806466, 1611799, 1806904, 1806904, 1611799, 1806904, 1611799, 1806492, 1806492,
+ 1806466, 1806492, 1611799, 1806466, 1806492, 1806492, 1806492, 1806466, 1806492, 1806466, 1806466,
+ 1806492, 1806492, 1611799, 1806466, 1806492, 1806492, 1806492, 1806492, 1806466, 1806466, 1806492,
+ 1806466, 1806466, 1806466, 1806466, 1806492, 1806466, 1806492, 1806466, 1806466, 1806492, 1806492,
+ 1806466, 1806492, 1806466, 1806466, 1806492, 1806466, 1806492, 1806466, 1806492, 1806466, 1806466,
+ 1806492, 1806466, 1806492, 1806492, 1806492, 1806492, 1806466, 1806466, 1806466, 1806466, 1806492,
+ 1806466, 1806492, 1806492, 1806466, 1806492, 1806492, 1806492, 1806466, 1806466, 1806466, 1806466,
+ 1806466, 1806492, 1806466, 1806466, 1806466, 1806492, 1806466, 1806492, 1806492, 1806466, 1806492,
+ 1806492, 1806466, 1806466, 1806492, 1806466, 1806492, 1806466, 1806466, 1806466, 1806492, 1806466,
+ 1806904, 1806448, 1806904, 1806448, 1806904, 1611799, 1611799, 1611799, 1806904, 1806904, 1611799,
+ 1611799, 1806448, 1806904, 1806904, 1611799, 1806448, 1806904, 1611799, 1806904, 1611799, 1806904,
+ 1611799, 1806904, 1806904, 1806448, 1806904, 1806904, 1806904, 1806448, 1806448, 1806904, 1806904,
+ 1611799, 1806448, 1611799, 1611799, 1611799, 1806448, 1611799, 1806904, 1611799, 1806448, 1806904,
+ 1611799, 1611799, 1611799, 1611799, 1611799, 1611799, 1611799, 1806904, 1806904, 1806904, 1806904,
+ 1611799, 1611799, 1611799, 1806448, 1611799, 1806448, 1806448, 1806448, 1611799, 1611799, 1806448,
+ 1611799, 1806904, 1806448, 1806904, 1611799, 1611799, 1806904, 1611799, 1806492, 1806466, 1806904,
+ 1806466, 1806466, 1806492, 1611799, 1806466, 1611799, 1611799, 1806448, 1611799, 1806448, 1806904,
+ 1806904, 1806466, 1806904, 1806448, 1611799, 1611799, 1806448, 1611799, 1806466, 1806492, 1611799,
+ 1611799, 1611799, 1806492, 1611799, 1806492, 1806492, 1806904, 1806492, 1806904, 1806492, 1806492,
+ 1611799, 1611799, 1806904, 1611799, 1611799, 1806492, 1611799, 1611799, 1806492, 1611799, 1806492,
+ 1806492, 1806492, 1806904, 1806904, 1611799, 1806448, 1611799, 1806904, 1611799, 1806466, 1806466,
+ 1611799, 1611799, 1611799, 1611799, 1806448, 1806466, 1611799, 1806904, 1806448, 1806448, 1611799,
+ 1806492, 1611799, 1611799, 1806466, 1611799, 1806492, 1611799, 1806492, 1806466, 1806448, 1611799,
+ 1806492, 1806448, 1611799, 1806492, 1806904, 1806492, 1806492, 1611799, 1611799, 1806904, 1806904,
+ 1806448, 1611799, 1806492, 1611799, 1806492, 1806492, 1611799, 1806466, 1806904, 1806448, 1806904,
+ 1806448, 1806904, 1806448, 1806448, 1806448, 1806448, 1806448, 1589156, 1806448, 1589156, 1589156,
+ 1589156, 1806448, 1806448, 1806448, 1806448, 1806448, 1806904, 1806448, 1589156, 1589156, 1806448,
+ 1589156, 1589156, 1806448, 1806904, 1806904, 1589156, 1589156, 1806904, 1589156, 1806448, 1806904,
+ 1806904, 1806904, 1806448, 1589156, 1806448, 1589156, 1806448, 1806448, 1806904, 1806448, 1806904,
+ 1806904, 1806448, 1806904, 1806904, 1806448, 1806904, 1806448, 1611799, 1806448, 1806448, 1806904,
+ 1806448, 1806448, 1806904, 1806448, 1806904, 1806448, 1806904, 1806448, 1806448, 1806903, 1806448,
+ 1589156, 1806904, 1589156, 1806448, 1589156, 1589156, 1806448, 1806448, 1806904, 1806904, 1806448,
+ 1806904, 1806904, 1806904, 1806448, 1589156, 1806448, 1806904, 1589156, 1589156, 1806904, 1806448,
+ 1806904, 1806904, 1806904, 1589156, 1806904, 1806448, 1611799, 1806448, 1806448, 1589156, 1806904,
+ 1611799, 1589156, 1806448, 1806904, 1806904, 1806448, 1589156, 1589156, 1806904, 1589156, 1806448,
+ 1611799, 1806448, 1806448, 1806904, 1589156, 1806448, 1806904, 1806448, 1589156, 1806448, 1611799,
+ 1589156, 1589156, 1806904, 1806448, 1806448, 1806904, 1806904, 1806448, 1611799, 1589156, 1589156,
+ 1806904, 1589156, 1611799, 1589156, 1806904, 1806448, 1589156, 1806904, 1806904, 1589156, 1611799,
+ 1806904, 1589156, 1806904, 1806448, 1589156, 1806904, 1806448, 1589156, 1806904, 1589156, 1806904,
+ 1806904, 1589156, 1806904, 1806448, 1806448, 1611799, 1806448, 1589156, 1806904, 1611799, 1806448,
+ 1806448, 1589156, 1806448, 1611799, 1589156, 1806448, 1806904, 1806904, 1589156, 1806904, 1806904,
+ 1611799, 1806904, 1589156, 1806904, 1589156, 1589156, 1589156, 1611799, 1806904, 1806448, 1806448,
+ 1611799, 1806448, 1589156, 1806448, 1589156, 1806448, 1806904, 1611799, 1806448, 1806904, 1589156,
+ 1806904, 1589156, 1806904, 1589156, 1806448, 1806904, 1589156, 1806448, 1806448, 1611799, 1589156,
+ 1611799, 1589156, 1806904, 1589156, 1806448, 1806448, 1806904, 1589156, 1806904, 1806904, 1806448,
+ 1806904, 1589156, 1611799, 1806904, 1806485, 1806485, 1806457, 1806457, 1806457, 1806457, 1806457,
+ 1806446, 1806446, 1806457, 1806457, 1806485, 1806485, 1806457, 1806485, 1806457, 1806457, 1806457,
+ 1806457, 1806485, 1806457, 1806457, 1806457, 1806485, 1806485, 1806457, 1806457, 1806457, 1806457,
+ 1806457, 1806457, 1806485, 1806457, 1806485, 1806485, 1806457, 1806485, 1806457, 1806457, 1806457,
+ 1806457, 1806457, 1806457, 1806457, 1806457, 1806457, 1806457, 1806457, 1806485, 1806485, 1806457,
+ 1806457, 1806485, 1806457, 1806485, 1806457, 1806457, 1806485, 1806457, 1806457, 1806485, 1806457,
+ 1806485, 1806485, 1806446, 1806446, 1806466, 1806446, 1806457, 1806457, 1806457, 1806446, 1806446,
+ 1806446, 1806448, 1806485, 1806485, 1806457, 1806485, 1806457, 1806457, 1806485, 1806446, 1806457,
+ 1806485, 1806457, 1806457, 1806457, 1806446, 1806485, 1806446, 1806446, 1806446, 1806457, 1806457,
+ 1806446, 1806457, 1806446, 1806485, 1806457, 1806457, 1806457, 1806446, 1806446, 1806446, 1806446,
+ 1806446, 1806446, 1806457, 1806457, 1806485, 1806446, 1806457, 1806446, 1806485, 1806446, 1806485,
+ 1806485, 1806457, 1806485, 1806457, 1806446, 1806457, 1806457, 1806485, 1806446, 1806446, 1806457,
+ 1806446, 1806457, 1806485, 1806457, 1806457, 1806446, 1806457, 1806446, 1806457, 1806446, 1806446,
+ 1806485, 1611800, 1806485, 1806485, 1611800, 1806457, 1611800, 1806485, 1806485, 1806903, 1806485,
+ 1611800, 1611800, 1806485, 1806485, 1806903, 1806485, 1611800, 1611800, 1806457, 1806485, 1806903,
+ 1806485, 1806485, 1611800, 1806485, 1611800, 1806457, 1611800, 1611800, 1806903, 1806485, 1611800,
+ 1806457, 1611800, 1806485, 1611800, 1806457, 1611800, 1611800, 1806485, 1611800, 1806485, 1611800,
+ 1806903, 1611799, 1806457, 1806485, 1806485, 1611800, 1611800, 1806903, 1806485, 1806485, 1806485,
+ 1806903, 1806485, 1806457, 1611800, 1806903, 1806485, 1806485, 1611800, 1806903, 1806457, 1806903,
+ 1806485, 1806903, 1806485, 1806457, 1611800, 1806485, 1806485, 1611800, 1806903, 1611800, 1611800,
+ 1611800, 1806485, 1806457, 1806485, 1806485, 1611800, 1611800, 1806457, 1806457, 1611800, 1611800,
+ 1806457, 1611800, 1806485, 1806457, 1806485, 1806457, 1806457, 1806485, 1806485, 1806457, 1611800,
+ 1806485, 1806457, 1611800, 1611800, 1611800, 1611800, 1806485, 1806457, 1806485, 1806457, 1611800,
+ 1806485, 1806485, 1806485, 1611800, 1806485, 1611800, 1806485, 1806485, 1806485, 1806485, 1806485,
+ 1806457, 1806457, 1806485, 1806485, 1806485, 1806485, 1806457, 1806485, 1806485, 1806485, 1806485,
+ 1806457, 1806485, 1806457, 1806457, 1806485, 1806457, 1806485, 1806457, 1806457, 1806485, 1806485,
+ 1806485, 1806485, 1806457, 1806457, 1806457, 1806457, 1806485, 1806485, 1806485, 1806457, 1806457,
+ 1806457, 1806485, 1806485, 1806457, 1806457, 1806457, 1806485, 1806457, 1806485, 1806485, 1806485,
+ 1806485, 1806247, 1611800, 1611800, 177449, 1611800, 1806444, 1611800, 1806247, 177449, 1611800,
+ 1806444, 1611800, 1806444, 1611800, 1806444, 1611800, 1806444, 177449, 1806444, 1806444, 1806444,
+ 1806247, 177449, 1611800, 1806444, 1806444, 177449, 1806444, 1611800, 177449, 1806444, 1806247, 1611800,
+ 1611800, 1806247, 1806444, 177449, 1611800, 177449, 1611800, 1806247, 1611800, 1806444, 177449, 1806444,
+ 1611800, 177449, 1611800, 1611800, 1806247, 1611800, 177449, 1611800, 1611800, 1611800, 177449, 1611800,
+ 1806247, 1611800, 177449, 177449, 1806247, 1611800, 1806444, 1806247, 1611800, 1611800, 1611800,
+ 1806247, 1611800, 1806444, 1806444, 1806247, 1611800, 1611800, 1806444, 1806247, 1611800, 1806247,
+ 1611800, 1806247, 177449, 1611800, 1806444, 1611800, 177449, 1611800, 1806247, 1806444, 177449, 1806444,
+ 1611800, 1806247, 1611800, 1806444, 1611800, 1611800, 1611800, 1806247, 1806247, 177449, 177449,
+ 1611800, 177449, 1806444, 1806444, 1611800, 1806444, 1611800, 1806444, 1806444, 1806444, 1611800,
+ 177449, 1611800, 1611800, 1806444, 1806444, 1806444, 1611800, 1806444, 1806444, 1806444, 177449,
+ 1806247, 1611800, 1806247, 1806247, 1611800, 1806247, 1806247, 1806444, 1806247, 1806444, 177449,
+ 1806444, 1806247, 1806247, 177449, 1806247, 1806247, 1806444, 177449, 1806444, 1806444, 1806444,
+ 1806444, 1611800, 177449, 1611800, 1806247, 1806247, 1806444, 1806247, 1611800, 1806444, 1806444,
+ 177449, 1611800, 1806444, 1806444, 1806247, 1806444, 1806444, 1806247, 1806444, 1806444, 1806247,
+ 1611800, 1806247, 1806247, 1611800, 1806444, 1806444, 1806444, 1611800, 1806444, 1806247, 1806444,
+ 1806444, 1806247, 1611800, 1806444, 1806247, 1806247, 1806444, 1611800, 1806247, 1806247, 1806444,
+ 1806444, 1611800, 1806247, 1611800, 1806247, 1806444, 1806444, 1806247, 1806247, 1806247, 1611800,
+ 1806247, 1806444, 177449, 177449, 1806444, 177449, 177449, 1806444, 1806247, 1806247, 1806247, 177449,
+ 1611800, 1806247, 1806247, 177449, 177449, 1806247, 1806444, 1806444, 1806444, 1611800, 1806247,
+ 1806444, 1806247, 177449, 1611800, 177449, 1806444, 1806247, 1806247, 177449, 1806247, 1806444, 177449,
+ 177449, 1806444, 177449, 1611800, 1806247, 177449, 177449, 1806444, 1611800, 1806247, 1806247, 1806247,
+ 177449, 177449, 1806247, 177449, 1611800, 1806247, 1806247, 177449, 1806247, 1806444, 177449, 1806444,
+ 177449, 1806444, 1806247, 1806444, 1806247, 1806444, 1806247, 1806444, 1806247, 1806247, 1806247,
+ 1806444, 177449, 177449, 1806247, 1806444, 1806247, 1806444, 1806444, 1806247, 1806444, 177449, 1806444,
+ 1806444, 1611800, 177449, 1806247, 177449, 1806247, 177449, 177449, 177449, 1806444, 1806444, 1806247,
+ 1806444, 1806247, 1806247, 1806444, 177449, 1806444, 177449, 177449, 1806247, 177449, 177449, 177449,
+ 177449, 1806247, 1806247, 177449, 1806444, 1806247, 1806444, 177449, 1806247, 1806247, 1806444, 1806247,
+ 1806247, 177449, 177449, 1806247, 177449, 1806247, 1806247, 177449, 177449, 1806247, 1806247, 1806247,
+ 177449, 177449, 177449, 1806247, 177449, 177449, 177449, 177449, 177449, 177449, 177449, 1806247,
+ 1806247, 177449, 1806247, 177449, 177449, 177449, 177449, 177449, 177449, 1806247, 2848359, 1806247,
+ 1806247, 1806247, 1589156, 1806247, 1806247, 1806247, 1806247, 1806444, 1806444, 177449, 177449, 177449,
+ 177449, 177449, 177449, 177449, 177449, 177449, 1589156, 1589156, 3249936, 1589156, 1589156, 3249936,
+ 1806392, 1806392, 3249936, 3249936, 1806392, 3249936, 1589156, 1589156, 1806392, 3249936, 1589156,
+ 3249936, 3249936, 3249936, 1589156, 1806392, 1806392, 3249936, 1806392, 1589156, 1589156, 3249936,
+ 1589156, 3249936, 3249936, 3249936, 3249936, 3249936, 3249936, 3249936, 1589156, 3249936, 1589156,
+ 3249936, 3249936, 3249936, 3249936, 1589156, 3249936, 3249936, 3249936, 3249936, 1589156, 3249936,
+ 3249936, 1589156, 1589156, 1589156, 3249936, 1589156, 1589156, 3249936, 1589156, 3249936, 1589156,
+ 3249936, 3249936, 3249936, 1589156, 1589156, 3249936, 1589156, 1589156, 3249936, 3249936, 3249936,
+ 1589156, 1589156, 1589156, 1589156, 3249936, 1589156, 3249936, 3249936, 3249936, 3249936, 1589156,
+ 3249936, 1589156, 3249936, 1589156, 1589156, 1589156, 1589156, 3249936, 3249936, 3249936, 3249936,
+ 177449, 3249936, 1589156, 1589156, 3249936, 3249936, 1589156, 3249936, 1589156, 3249936, 1589156,
+ 1589156, 1589156, 1589156, 1589156, 1589156, 3249936, 1589156, 177454, 177454, 177454, 177454, 177454,
+ 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454,
+ 1806444, 177454, 1806444, 177454, 1806444, 177454, 177454, 177454, 177454, 177454, 177454, 177454,
+ 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454, 177454,
+ 177454, 1806444, 177454, 177454, 177454, 1806444, 1806444, 177454, 177454, 177449, 177454, 177454,
+ 177454, 1806444, 177454, 177449, 1806444, 1806444, 1589156, 1611800, 177454, 1806444, 1806444, 1806444,
+ 177454, 177454, 1806247, 1806444, 1806247, 1806444, 177454, 177454, 1806444, 177454, 1806247, 1806444,
+ 177454, 1806247, 1806247, 177454, 177454, 177454, 177454, 1806247, 1806444, 177454, 177454, 177454,
+ 1806247, 1806247, 177454, 177454, 1806444, 1806444, 1806247, 177454, 1806441, 1806441, 1806441, 1806441,
+ 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441,
+ 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441,
+ 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441,
+ 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441,
+ 1806441, 1806441, 1806441, 1806441, 1806441, 852190, 1311395, 1806441, 852190, 1311395, 1806441,
+ 1806441, 1806441, 852190, 1311395, 852190, 1311395, 852190, 1311395, 1806441, 852190, 1311395, 852190,
+ 1311395, 1806441, 1806441, 1806441, 852190, 1311395, 1806441, 1806441, 852190, 1311395, 852190, 1311395,
+ 1806441, 1806441, 852190, 1311395, 1806441, 852190, 1311395, 1806441, 1806441, 1806441, 852190, 1311395,
+ 852190, 1311395, 852190, 1311395, 852190, 1311395, 1806441, 1806441, 852190, 1311395, 852190, 1311395,
+ 1806441, 852190, 1311395, 852190, 1311395, 852190, 1311395, 1806441, 1806441, 852190, 1311395, 1806441,
+ 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441,
+ 1806441, 1806441, 1806441, 1806441, 852190, 1311395, 852190, 1311395, 852190, 1311395, 1806441, 852190,
+ 1311395, 1806444, 852190, 1311395, 1806441, 1806441, 852190, 1311395, 852190, 1311395, 1806441, 1806441,
+ 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441, 1806441,
+ 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395,
+ 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395,
+ 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395,
+ 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395,
+ 852190, 1311395, 3198866, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190,
+ 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190,
+ 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190,
+ 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190,
+ 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190,
+ 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190,
+ 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190,
+ 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190,
+ 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 852190, 1311395, 1806441,
+ 1806441, 852190, 1311395, 1806441, 852190, 1311395, 852190, 1311395, 1806441, 1806441, 852190, 1311395,
+ 852190, 1311395, 1806441, 852190, 1311395, 1806441, 852190, 1311395, 1806441, 1806441, 852190, 1311395,
+ 852190, 1311395, 1806441, 852190, 1311395, 1806441, 852190, 1311395, 852190, 1311395, 1812929, 1806908,
+ 1812929, 1806507, 1812929, 1806908, 1812929, 1806908, 1806507, 1812929, 1812929, 1812929, 1806908,
+ 1806908, 261365, 1806908, 1806507, 1812929, 1806908, 1806908, 261365, 1812929, 1575284, 1806908,
+ 1806908, 1806908, 1812929, 1806507, 1806908, 1812929, 1812929, 1812929, 261365, 1812929, 1806908,
+ 261365, 1806507, 1806908, 1812929, 1806908, 1812929, 1806507, 1575284, 261365, 1575284, 261365, 1806908,
+ 1812929, 1806908, 1812929, 1575284, 1806908, 261365, 1812929, 261365, 1806908, 1806908, 1806908,
+ 1806908, 1812929, 1806507, 1806908, 261365, 1812929, 1806908, 261365, 1812929, 1812929, 1812929, 261365,
+ 1806650, 261365, 1812929, 1806650, 261365, 1806507, 1806908, 1806908, 1812929, 1806650, 261365, 1806908,
+ 1806650, 1806507, 1812925, 1806908, 261365, 1812929, 261365, 1806908, 1806650, 1812929, 261365, 1806507,
+ 261365, 1806507, 1806908, 1812929, 261365, 1812929, 1806650, 261365, 1812929, 1812929, 1806650, 1806650,
+ 1806908, 261365, 1806507, 1812929, 1806650, 1806650, 1806507, 1812929, 261365, 1806908, 261365, 1812929,
+ 1806908, 261365, 1806507, 1806507, 1806908, 1812929, 1806908, 1812929, 1806908, 1812929, 1806908,
+ 1806908, 1812929, 1806908, 1806507, 261365, 1806439, 1806439, 261365, 1806908, 1806507, 1806908,
+ 1806908, 1806908, 1806507, 1806908, 1806507, 261365, 1575284, 1575284, 1806507, 1806439, 1806439,
+ 1806908, 1806908, 1575284, 1806908, 1806507, 1806439, 1806507, 1812929, 1806908, 261365, 1806507,
+ 1806908, 1575284, 1806439, 1806439, 1806507, 1575284, 1806439, 1812929, 1806908, 1806908, 1812929,
+ 1806908, 1575284, 261365, 1812929, 1812929, 1806908, 1812929, 1812929, 1812929, 1806507, 261365,
+ 1812929, 1806908, 1806412, 1806908, 261365, 1806908, 1806908, 1812929, 1812929, 1806908, 261365,
+ 1806908, 1575268, 1806908, 1806908, 261365, 1806908, 1806439, 1806507, 1575284, 1806507, 261365,
+ 1806507, 261365, 1806908, 1806908, 1806908, 1806908, 1806439, 1806507, 261365, 1806507, 1806908, 261365,
+ 1575284, 1806439, 1575284, 1806439, 1806908, 1812929, 1575284, 1812929, 1806507, 261365, 1812929,
+ 1812929, 1806507, 1806439, 261365, 1575284, 1806507, 1575284, 1812929, 1806507, 261365, 1575284,
+ 1806507, 1812929, 1575284, 1806908, 1812929, 1806908, 1812929, 1812929, 1812929, 1806507, 1806908,
+ 1575284, 261365, 261365, 261365, 261365, 261365, 223175, 261365, 1806908, 1806908, 261365, 1812929,
+ 223175, 261365, 223175, 261365, 223175, 261365, 1812929, 1806908, 261365, 1806908, 261365, 1806908,
+ 1812929, 223175, 223175, 1806908, 223175, 1806908, 223175, 261365, 223175, 223175, 223175, 223175,
+ 223175, 261365, 261365, 223175, 223175, 261365, 1812929, 261365, 261365, 1812929, 223175, 223175,
+ 223175, 261365, 223175, 1812929, 223175, 261365, 261365, 1812929, 223175, 223175, 1812929, 261365,
+ 223175, 261365, 223175, 261365, 223175, 1812929, 223175, 261365, 1812929, 223175, 223175, 1812929,
+ 261365, 261365, 261365, 261365, 223175, 1812929, 223175, 1812929, 261365, 223175, 223175, 223175,
+ 223175, 223175, 261365, 223175, 1812929, 1812929, 223175, 1812929, 223175, 1812929, 223175, 1812929,
+ 1812929, 261365, 1812929, 1812929, 1812929, 1812929, 1812929, 261365, 1812929, 261365, 223175, 261365,
+ 1812929, 261365, 223175, 261365, 261365, 261365, 223175, 261365, 261365, 223175, 261365, 223175, 261365,
+ 223175, 261365, 1812929, 261365, 223175, 261365, 223175, 223175, 223175, 261365, 261365, 261365, 261365,
+ 261365, 1812929, 1812929, 261365, 1812929, 261365, 1812929, 1812929, 1812929, 1812929, 261365, 261365,
+ 261365, 1812929, 261365, 1812929, 261365, 1806513, 261365, 261365, 1812929, 261365, 1812929, 261365,
+ 1812929, 261365, 1812929, 261365, 1812929, 1812929, 1812929, 261365, 261365, 1812929, 261365, 261365,
+ 1812929, 261365, 261365, 261365, 261365, 261365, 1812929, 1812929, 1812929, 1806650, 1806650, 1806513,
+ 1806443, 1806650, 1806443, 1806443, 1806443, 1806443, 1806443, 1806513, 1806513, 1806443, 1806650,
+ 1806443, 1806443, 1806443, 1806513, 1806513, 1806443, 1806513, 1806443, 1806443, 1806443, 1806650,
+ 1806513, 1806443, 1806443, 1806443, 1806443, 1575284, 1575284, 1575284, 1806650, 1575284, 1806443,
+ 1806650, 1806650, 1806443, 1806650, 1806443, 1806650, 1806443, 1806513, 1806443, 1575284, 1806513,
+ 1575284, 1575284, 1806513, 1806443, 1806443, 1575284, 1806650, 1575284, 1806513, 1806443, 1575284,
+ 1806443, 1806650, 1806443, 1806443, 1806650, 1806513, 1806443, 1575284, 1806443, 1806513, 1806443,
+ 1806443, 1806443, 1806513, 1806443, 1806439, 1806443, 1806443, 1806443, 1806513, 1806513, 1806443,
+ 1806443, 1806443, 1806513, 1806443, 1806443, 1806443, 1812925, 1806513, 1806443, 1812925, 1812925,
+ 1806443, 1812925, 1806443, 1806443, 1812925, 1806443, 1806443, 1806650, 1806650, 1806650, 1806443,
+ 1806650, 1806513, 1806650, 1812925, 1806513, 1806443, 1806443, 1806650, 1806513, 1812925, 1806513,
+ 1806443, 1806513, 1812925, 1806443, 1806443, 1812925, 1806650, 1806513, 1806443, 1806513, 1812925,
+ 1806513, 1806443, 1806513, 1806650, 1806650, 1812925, 1806443, 1806513, 1806443, 1806513, 1812925,
+ 1806650, 1806443, 1806513, 1806513, 1806513, 1806513, 1806650, 1806650, 1806513, 1806650, 1806513,
+ 1806650, 1806650, 1806513, 1812925, 1812925, 1806513, 1806513, 1812925, 1806443, 1806443, 1806443,
+ 1806443, 1806650, 1806513, 1806650, 1806443, 1806513, 1575268, 1806650, 1806650, 1806650, 1806650,
+ 1575284, 1575284, 1575284, 1575284, 1575284, 1575284, 1806443, 1806650, 1575268, 1575284, 1806650,
+ 1806650, 1806650, 1575268, 1575268, 1806650, 1806650, 1575284, 1575284, 1575284, 1806650, 1575284,
+ 1806443, 1575284, 1575284, 1806443, 1575284, 1575268, 1806443, 1806650, 1575284, 1806650, 1575284,
+ 1806650, 1806650, 1575284, 1806650, 1575284, 1575284, 1806650, 1575284, 1806650, 1806443, 1806650,
+ 1575284, 1575284, 1575284, 1806650, 1575284, 1806443, 1806650, 1575284, 1575284, 1806443, 1806650,
+ 1806650, 1806650, 1806650, 1806443, 1575284, 1806650, 1575284, 1575284, 1806443, 1575284, 1575284,
+ 1806443, 1806650, 1806650, 1806650, 1806650, 1575284, 1806650, 1806650, 1806443, 1575284, 1806650,
+ 1575284, 1575284, 1575284, 1806650, 1806443, 1806650, 1575284, 1575284, 1806443, 1806443, 1806650,
+ 1806650, 1575284, 1806650, 1806650, 1575284, 1806443, 1575268, 1575284, 1806443, 1575284, 1806650,
+ 1806650, 1575284, 1806443, 1575268, 1806443, 1575284, 1575284, 1575284, 1575284, 1806650, 1575284,
+ 1806650, 1806650, 1575284, 1806650, 1806650, 1806443, 1575284, 1575284, 1575284, 1575284, 1806650,
+ 1575284, 1575268, 1806650, 1575284, 1806650, 1806650, 1806507, 1806650, 1806650, 1806650, 1575268,
+ 1806650, 1575284, 1575284, 1575281, 1806650, 1806443, 1575268, 1575284, 1806443, 1806443, 1575268,
+ 1575284, 1806443, 1806513, 1806650, 1575284, 1806650, 1806443, 1575268, 1806650, 1806443, 1575284,
+ 1806513, 1575284, 1575268, 1575284, 1806443, 1806513, 1806513, 1806443, 1575268, 1806650, 1806650,
+ 1575284, 1806443, 1575284, 1575284, 1806650, 1575284, 1806650, 1806443, 1575284, 1575268, 1806443,
+ 1575284, 1806650, 1806443, 1806650, 1575268, 1575284, 1575268, 1806650, 1806443, 1806443, 1806650,
+ 1575284, 1806650, 1806650, 1575284, 1806650, 1575284, 1806443, 1575284, 1575284, 1575268, 1806650,
+ 1806443, 1575284, 1575268, 1575284, 1806443, 1806650, 1806443, 1806650, 1806650, 1575284, 1806650,
+ 1806443, 1806443, 1806443, 1806650, 1806650, 1806443, 1575268, 1806650, 1575284, 1806443, 1575268,
+ 1806443, 1575268, 1806500, 1575268, 1806500, 1575268, 1575268, 1575268, 1575268, 1575268, 1812925,
+ 1575268, 1806500, 1812925, 1575268, 1575268, 1575268, 1812925, 1806500, 1575268, 1806500, 1575268,
+ 1806500, 1812925, 1575268, 1812925, 1575268, 1812925, 1575268, 177456, 1812925, 1812925, 1812925,
+ 177456, 1812925, 1575268, 1575268, 1812925, 1575268, 1812925, 1806500, 1812925, 1806500, 1575268,
+ 1812925, 1575268, 1812925, 1575268, 1575268, 1806500, 1575268, 1575268, 1812925, 1575268, 1575268,
+ 1575268, 1812925, 1806500, 1812925, 1508979, 1806500, 1812925, 1812923, 1806500, 1575268, 1812925,
+ 1812925, 1812925, 1806500, 1575268, 1575268, 1812925, 1575268, 1575268, 1575268, 1812925, 1812925,
+ 1806500, 1812925, 1575268, 1812925, 1806500, 1812925, 1806500, 1575268, 1812925, 1575268, 1812925,
+ 1575268, 1575268, 1806500, 1812925, 1806443, 1575268, 1806500, 1806500, 1575268, 1806500, 1575268,
+ 1806500, 1806443, 1806500, 1806443, 1806500, 1575268, 1806443, 1806443, 1806500, 1806443, 1575268,
+ 1806500, 1575268, 1806500, 1800592, 1806443, 1575268, 1575268, 1575268, 1575268, 1575268, 1575268,
+ 1575268, 1806393, 1575268, 1806443, 1575268, 1575268, 1575268, 1806908, 1575268, 1575268, 1575268,
+ 1575268, 1806500, 1806500, 1806500, 1575268, 1575268, 1806500, 1575268, 1806500, 1806500, 1806500,
+ 1575268, 1806500, 1575268, 1806500, 1806500, 1806500, 1575268, 1806500, 1806500, 1575268, 1575268,
+ 1806500, 1575268, 1812925, 1812925, 1812925, 1806500, 1575268, 1806500, 1575268, 1812925, 1575268,
+ 1812925, 1575268, 1806500, 1575268, 1575268, 1812925, 1575268, 1812925, 1806500, 1812925, 1806500,
+ 1575268, 1806500, 1812925, 1806500, 1806500, 1812925, 1575268, 177449, 1575268, 177449, 1812925, 177449,
+ 1812925, 1812925, 1575268, 1575268, 177449, 177449, 1575268, 1812925, 1812925, 177449, 1812925, 177449,
+ 177449, 177449, 1812925, 1812925, 1812925, 177449, 1575268, 1575268, 1812925, 177456, 1575268, 177456,
+ 1575268, 177456, 1575268, 177456, 1575268, 177456, 177449, 1806442, 177449, 1806442, 177449, 177449,
+ 1812925, 177449, 1812925, 177449, 1806442, 1806442, 177449, 1806442, 1812925, 1812925, 177449, 177449,
+ 177449, 1812925, 1812925, 1812925, 1812925, 177449, 177449, 1812925, 1806442, 1812925, 177456, 1806442,
+ 1806442, 1806442, 1812925, 1806442, 1812925, 1812925, 1812925, 1812925, 1812925, 1812925, 1812925,
+ 1812925, 1812925, 1812925, 1812925, 1812925, 1812925, 1812925, 1812925, 1812925, 1812925, 1812925,
+ 1812925, 1812925, 1806500, 1812925, 1812925, 1806500, 1812925, 1812925, 1812925, 1806500, 1812925,
+ 1812925, 1806500, 1812925, 1812925, 1812925, 1812925, 1812925, 1812925, 1806500, 1812925, 1812925,
+ 1812925, 1812925, 1806500, 1812925, 1812925, 1806500, 1806500, 1812925, 1806500, 1806442, 1806442,
+ 177456, 1806507, 177456, 1812923, 1806507, 1806507, 1812923, 1806442, 1812923, 1806507, 1806507,
+ 1812923, 177456, 1812923, 1806507, 177456, 177456, 1806507, 1806507, 1806507, 1806442, 1806442, 177456,
+ 1806442, 1806507, 177456, 1806442, 177456, 177456, 1806442, 1575284, 177456, 177456, 1806442, 177456,
+ 1806442, 177456, 177456, 1806442, 1806442, 1812923, 1806442, 1812923, 177456, 1806442, 177456, 177456,
+ 1806442, 1806442, 1812923, 1806442, 1806442, 1806442, 1806442, 1806442, 1806442, 1806442, 1806442,
+ 1806442, 1806442, 177456, 1806442, 1806442, 177456, 1806442, 1806442, 177456, 1806442, 1806442, 1806442,
+ 1806442, 177456, 1806442, 177456, 177456, 1806442, 177456, 1806442, 1806442, 177456, 177456, 1806442,
+ 1812923, 1806442, 1812923, 1806442, 177456, 1806442, 1806442, 1806442, 1806442, 1812923, 177456,
+ 1806442, 1812923, 1812923, 177456, 1806442, 1806442, 1806442, 1806442, 1806442, 177456, 1812923, 177456,
+ 1812923, 1812923, 1812923, 1806442, 1812923, 1806442, 177456, 1812923, 1806442, 177456, 1812923,
+ 1806442, 1812923, 177456, 1812923, 1806442, 1806442, 177456, 1806442, 1806442, 1806442, 1812923,
+ 1806442, 177456, 1806442, 1806442, 1806442, 1806442, 1806442, 1806442, 1812923, 1812923, 1806442,
+ 1806443, 1806442, 1806442, 1806442, 1806442, 1806442, 177456, 1806442, 1806442, 1812923, 177456, 177456,
+ 1806442, 1806507, 177456, 1806507, 1806442, 1806507, 177456, 1806507, 1806908, 177456, 177456, 177456,
+ 1806507, 1806908, 1806908, 177456, 1806507, 1806507, 177456, 1806507, 1806908, 177456, 177456, 1806908,
+ 177456, 1806908, 1806507, 1806507, 1806442, 1806507, 1806507, 1806507, 177456, 1806442, 177456, 1806507,
+ 1806507, 1806442, 1806507, 1806507, 1806507, 1806507, 1806442, 1806507, 1806908, 1806908, 1806507,
+ 177456, 177456, 177456, 1806507, 177456, 177456, 177456, 177456, 1806507, 1806908, 1806507, 1806908,
+ 1806507, 177456, 1806507, 1806507, 1806442, 1806908, 1806442, 1806507, 177456, 1806507, 177456, 1806507,
+ 177456, 1806507, 1806442, 1806908, 177456, 1806507, 177456, 1806908, 177456, 1806442, 1806507, 177456,
+ 1806442, 1806908, 177456, 1806507, 177456, 1806507, 177456, 1806442, 177456, 1806507, 1806442, 1806507,
+ 1806507, 1806908, 1806442, 1806908, 1806908, 1806507, 1806507, 1806442, 1806908, 1806507, 1806908,
+ 1806442, 1806507, 1806908, 1806507, 177456, 1806908, 1806507, 1806908, 177456, 177456, 1806908, 1806442,
+ 1806507, 177456, 177456, 1806908, 177456, 177456, 1806507, 1806908, 1806507, 1806442, 1806908, 177456,
+ 177456, 1806507, 1806507, 177456, 1806507, 1806507, 1806908, 177456, 1806908, 177456, 1806908, 177456,
+ 1806507, 1806507, 1806500, 177456, 1806507, 1806507, 1806507, 177456, 1806507, 1806507, 1806507,
+ 1806442, 1806442, 177456, 1806442, 177456, 1806507, 177456, 1806442, 177456, 177456, 177456, 1806442,
+ 1806507, 1806507, 1806908, 1806507, 1806442, 1806507, 1806507, 1806908, 1806507, 1806507, 1806908,
+ 177456, 1806442, 177456, 1806908, 1806507, 1806442, 177456, 177456, 177456, 1806507, 177456, 1806507,
+ 177456, 177456, 1806908, 1806442, 177456, 1806908, 1806442, 177456, 177456, 1806908, 1806442, 177456,
+ 177456, 177456, 1806442, 1806908, 1806507, 177456, 1806442, 1806908, 177456, 1806908, 177456, 1806442,
+ 177456, 177456, 177456, 177456, 1575261, 1508979, 1508979, 1508979, 1806393, 1508979, 1806393, 1800592,
+ 1800592, 1508979, 1800592, 1806393, 1508979, 1800592, 1508979, 1508979, 1508979, 1806393, 1508979,
+ 1806393, 1800592, 1508979, 1806393, 1806393, 2080927, 1800592, 1806393, 1508979, 1806393, 1575261,
+ 1800592, 1575261, 1800592, 1806411, 1508979, 1508979, 1806411, 1806411, 1575261, 1508979, 1806411,
+ 1806411, 1806393, 1800592, 1508979, 1508979, 1800592, 1508979, 1508979, 1806411, 1508979, 1806393,
+ 1806411, 1508979, 1508979, 1806411, 1800592, 1508979, 1508979, 1806411, 1806393, 1806393, 1800592,
+ 1508979, 1806393, 1508979, 1806393, 1508979, 1806411, 1806393, 1806393, 1800592, 1806393, 1508979,
+ 1806393, 1508979, 1508979, 1800592, 1800592, 1508979, 1806411, 1508979, 1806393, 1800592, 1800592,
+ 1508979, 1806393, 1806393, 1800592, 1806393, 1800592, 1806393, 1800592, 1806393, 1508979, 1508979,
+ 1806393, 1800592, 1508979, 1800592, 1806393, 1508979, 1800592, 1806411, 1806411, 1508979, 1800592,
+ 1800592, 1806393, 1800592, 1508979, 1806411, 1806411, 1812923, 1812923, 1806411, 1508979, 1806411,
+ 1806411, 1806393, 1806411, 1806411, 1806393, 1806411, 1806393, 1806393, 1806393, 1806411, 1806393,
+ 1806393, 1806411, 1806411, 1806411, 1806393, 1806393, 1806411, 1812923, 1806413, 1806393, 1806411,
+ 1508979, 1806393, 1806411, 1812923, 1806393, 1508979, 1806393, 1812923, 1806393, 1812923, 1508979,
+ 1508979, 1812923, 1508979, 1812923, 1508979, 1812923, 1508979, 1806393, 1806393, 1806393, 1806411,
+ 1806411, 1812923, 1806393, 1508979, 1812923, 1806411, 1508979, 1812923, 1806393, 1806411, 1806411,
+ 1812923, 1508979, 1806411, 1806411, 1806393, 1806393, 1806411, 1806393, 1806393, 1806411, 1806411,
+ 1806393, 1806411, 1806411, 1806393, 1806393, 1806393, 1806411, 1806393, 1806411, 1806411, 1806411,
+ 1806411, 1806411, 1806393, 1806411, 1806411, 1508979, 1806393, 1812923, 1806393, 1508979, 1806393,
+ 1806393, 1806411, 1812923, 1508979, 1812923, 1812923, 1508979, 1812923, 1508979, 1806393, 1806411,
+ 1806393, 1508979, 1806411, 1806393, 1806411, 1806393, 1806411, 1812923, 1806411, 1806393, 1508979,
+ 1812923, 1806393, 1508979, 1812923, 1508979, 1508979, 1812923, 1806393, 1806411, 1806411, 1812923,
+ 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923,
+ 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923,
+ 1812922, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923,
+ 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923,
+ 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923,
+ 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923, 1812923,
+ 1812923, 1812923, 1812923, 1806411, 1806393, 1800592, 1806393, 1800592, 1806393, 1806393, 1812922,
+ 1812922, 1806411, 1800592, 1806411, 1812922, 1806393, 1806393, 1806411, 1812922, 1806393, 1806411,
+ 1812922, 1800592, 1812922, 1812922, 1800592, 1812922, 1812922, 1800592, 1812922, 1806411, 1800592,
+ 1812922, 1800592, 1575261, 1575261, 1812922, 1575261, 1575261, 1575261, 1575261, 1575261, 1575261,
+ 1575261, 1812922, 1575261, 1812922, 1806411, 1806411, 1812922, 1806411, 1812922, 1812922, 1812922,
+ 1806442, 1812922, 1575261, 1812922, 1800592, 1800592, 1575261, 1800592, 1575261, 1812922, 1812922,
+ 1800592, 1812922, 1575261, 1575261, 1575261, 1575261, 1575261, 1812922, 1812922, 1575261, 1575261,
+ 1800592, 1575261, 1508979, 1575261, 1812922, 1575261, 1575261, 1812922, 1800592, 1575261, 1812922,
+ 1800592, 1575261, 1575261, 1800592, 1800592, 1575261, 1575261, 1575261, 1812922, 1575261, 1800592,
+ 1575261, 1508979, 2848358, 1575261, 1575261, 1812922, 1508979, 1812922, 1575261, 1800592, 1575261,
+ 1508979, 1508979, 1575261, 1812922, 1508979, 1575261, 1575261, 1575261, 1575261, 1575261, 1508979,
+ 1800592, 1575261, 1575261, 1508979, 1575261, 1575261, 1575261, 1508979, 1812922, 1800592, 1812922,
+ 1575261, 1800592, 1508979, 1800592, 1812922, 1575261, 1575261, 1806411, 1800592, 1575261, 1806411,
+ 2080927, 1806393, 1575261, 1806393, 1508979, 1575261, 1800592, 1806393, 1806411, 2080927, 1806411,
+ 1800592, 1800592, 2080927, 1806393, 1806393, 1508979, 1575261, 1800592, 1508979, 2080927, 1800592,
+ 1806393, 1800592, 1575261, 1806411, 1806393, 1575261, 1806411, 1800592, 2080927, 1575261, 1806393,
+ 1575261, 1806411, 1800592, 1575261, 1806411, 1800592, 1806411, 1575261, 2080927, 1806411, 1806411,
+ 1806393, 1575261, 1806411, 1800592, 1806393, 1575261, 1806411, 1575261, 1806411, 1806393, 1806411,
+ 1800592, 1806411, 1806393, 1575261, 1800592, 1806393, 1575261, 1575261, 1508979, 1800592, 1806393,
+ 1575261, 1508979, 1806393, 1800592, 1806393, 2080927, 1800592, 1508979, 1800592, 1806411, 1806393,
+ 1800592, 1806393, 1800592, 1575261, 1806411, 2080927, 1800592, 1575261, 1806411, 1806393, 1575261,
+ 1806411, 1575261, 1806393, 1800592, 1800592, 2080927, 1800592, 1508979, 2080927, 1575261, 1575261,
+ 1800592, 1575261, 1806411, 1575261, 1806393, 1806393, 1508979, 2080927, 1806411, 1800592, 1508979,
+ 2080927, 1575261, 1575261, 1575261, 1806411, 1508979, 2080927, 1575261, 1806411, 1575261, 1508979,
+ 1806411, 1575261, 1806393, 2080927, 1508979, 1806411, 2080927, 1575261, 1508979, 2080927, 1806411,
+ 1806393, 1508979, 1806411, 1806411, 1800592, 1800592, 1806411, 1806393, 1806411, 1806411, 1575261,
+ 2080927, 1575261, 1806411, 1575261, 1806393, 2080927, 1508979, 1806411, 1800592, 1575261, 1575261,
+ 1508979, 1800592, 1575261, 1508979, 1800592, 1806411, 1806393, 1800592, 1800592, 1575261, 1800592,
+ 1800592, 1806411, 1806393, 1800592, 2080927, 1800592, 2080927, 1806411, 1806393, 1800592, 1806393,
+ 1800592, 1806393, 1800592, 2080927, 1800592, 1508979, 1800592, 1800592, 1806411, 1800592, 1575261,
+ 1575261, 1806393, 2080927, 1806411, 1800592, 1508979, 1806393, 1800592, 1508979, 1575261, 1508979,
+ 1575261, 1806411, 1508979, 2080927, 1800592, 1806411, 1800592, 2080927, 1508979, 1508979, 1806411,
+ 1806393, 1800592, 1806393, 1508979, 1508979, 1575261, 2080927, 1800592, 1575261, 1800592, 1800592,
+ 1806393, 1575261, 1508979, 1806411, 1575261, 1806411, 1508979, 2080927, 1508979, 1806411, 1800592,
+ 1806411, 1800592, 1508979, 1575261, 1806393, 1800592, 1575261, 1800592, 1508979, 2080927, 1800592,
+ 1800592, 2080927, 1800592, 1508979, 1806393, 1800592, 1508979, 1575261, 1800592, 2080927, 1806393,
+ 1806411, 1575261, 1508979, 1806393, 1800592, 1508979, 2080927, 1508979, 2080927, 1800592, 2080927,
+ 1508979, 1800592, 1575261, 1508979, 1800592, 1800592, 1806393, 1508979, 1806411, 2080927, 1806411,
+ 1575261, 1508979, 1508979, 1800592, 1575261, 1508979, 1806393, 1806411, 1508979, 1508979, 1800592,
+ 177456, 1508979, 1806411, 1806411, 1575261, 1508979, 1508979, 1508979, 1800592, 1806412, 1806516,
+ 2080927, 1806412, 2080927, 1806412, 2080927, 1806412, 1806516, 1806412, 1806516, 2080927, 1806412,
+ 1806516, 1806516, 1806516, 1806516, 2080927, 1806412, 1806516, 1806412, 1806516, 1806516, 2080927,
+ 1806516, 2080927, 1806412, 2080927, 1806412, 2080927, 1806412, 1806516, 2080927, 1806412, 2080927,
+ 1806412, 2080927, 2080927, 2080927, 1806516, 1806516, 1806516, 1806412, 2080927, 1806412, 2080927,
+ 1806412, 1806516, 1806411, 2080927, 1806516, 1806412, 2080927, 1806516, 1806412, 2080927, 1806516,
+ 1806516, 1806412, 1806516, 1806412, 1806412, 1806516, 1806516, 2080927, 1806412, 1806516, 2080927,
+ 2080927, 2080927, 2080927, 1806516, 1806412, 1806516, 1806412, 2080927, 1806516, 1806412, 2080927,
+ 2080927, 2080927, 2080927, 2080927, 1806516, 1806412, 2080927, 1806516, 2080927, 223175, 2080927,
+ 2080927, 223175, 1806412, 2080927, 1806412, 1806412, 1806516, 1806516, 2080927, 1806412, 2080927,
+ 2080927, 1806516, 1806516, 2080927, 1806412, 2080927, 1806412, 1806412, 2080927, 1806412, 2080927,
+ 1806516, 1806412, 1806516, 1806412, 2080927, 1806412, 2080927, 1806412, 1806516, 2080927, 1806516,
+ 2080927, 1806516, 1806516, 2080927, 1806412, 1806412, 1806516, 1806516, 2080927, 2080927, 1806412,
+ 1806516, 1806412, 1806412, 1806412, 1806516, 1806516, 1806516, 1806412, 1806516, 2080927, 1806412,
+ 2080927, 1806412, 1806516, 1806516, 2080927, 1806516, 1806412, 2080927, 2080927, 1806516, 2080927,
+ 1806516, 2080927, 2080927, 1806516, 1806412, 1806412, 2080927, 2080927, 2080927, 1806412, 1806412,
+ 1806516, 1806412, 1806412, 1806412, 1806516, 1806412, 1806516, 1806412, 1806516, 1806516, 1806516,
+ 1806412, 1806412, 1806412, 2080927, 2080927, 1806516, 2080927, 1806412, 2080927, 1806412, 1806412,
+ 2080927, 1806516, 1812922, 1806516, 1806516, 1812922, 1806516, 1806412, 2080927, 1812922, 2080927,
+ 1812922, 2080927, 2080927, 1812922, 1806516, 2080927, 1806516, 1806412, 1806516, 1806412, 1812922,
+ 1812922, 2080927, 2080927, 2080927, 1806516, 1812922, 1806412, 1812922, 1812922, 1806412, 1806412,
+ 2080927, 1806412, 1806412, 1806516, 1806516, 1812922, 1812922, 1806516, 1812922, 1812922, 1806516,
+ 1812922, 1806516, 1812922, 1806516, 1812922, 1812922, 1812922, 1806516, 1812922, 1806516, 1806516,
+ 1812922, 1812922, 1806516, 1812922, 1812922, 1806516, 1806516, 1812922, 1806516, 1812922, 1812922,
+ 1812922, 1812922, 1812922, 1812922, 223175, 1806516, 1812922, 1812922, 1812922, 1806516, 1812922,
+ 1806516, 1806516, 1806516, 1812922, 1812922, 1806516, 1812922, 1812922, 1806516, 1806516, 1812922,
+ 1812922, 1806516, 1806516, 1812922, 1806516, 1806516, 2080927, 1812922, 2080927, 2080927, 1812922,
+ 1812922, 1812922, 2080927, 1812922, 1812922, 2080927, 2080927, 2080927, 1812922, 1812922, 1812922,
+ 1812922, 1812922, 2080927, 1806412, 1806412, 1812922, 1806412, 1806412, 1812922, 1812922, 1812922,
+ 1812922, 1812922, 1806412, 1812922, 2080927, 2080927, 1812922, 1812922, 1812922, 1812922, 1812922,
+ 1812922, 1812922, 1812922, 1812922, 1812922, 1812922, 1812922, 1812922, 1812922, 1812922, 1812922,
+ 1812922, 1812922, 1812922, 1812922, 1812922, 1812922, 223175, 223175, 223175, 223175, 223175, 223175,
+ 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 1575261,
+ 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 1806412,
+ 223175, 223175, 1806412, 1806412, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175,
+ 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175, 223175,
+ 223175, 2092598, 223175, 223175, 1806412, 223175, 223175, 1806412, 1806516, 223175, 1806516, 1806412,
+ 1806516, 1806516, 1806412, 1806412, 1806516, 223175, 1806516, 1806412, 1806412, 1806516, 223175,
+ 1806412, 1806516, 223175, 1806412, 1806412, 223175, 223175, 223175, 223175, 1806412, 223175, 223175,
+ 1806412, 1806650, 1806412, 1806412, 1806412, 1806412, 1806412, 1806412, 1806412, 1806412, 1806412,
+ 1806412, 1806412, 223175, 1806412, 1806412, 1806516, 1806516, 1806516, 1806412, 1806412, 1806516,
+ 1806516, 1806516, 1806516, 1806516, 1806412, 1806516, 1806516, 1806412, 1806412, 1806412, 1806516,
+ 1806412, 1806412, 1806516, 1806516, 1806516, 1806412, 1806412, 1806516, 1806412, 1806412, 1806412,
+ 1806516, 1806516, 1575272, 1575272, 1575272, 1575272, 852176, 1575272, 1575272, 1575272, 1575272,
+ 1806516, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272,
+ 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272,
+ 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272,
+ 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272,
+ 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272,
+ 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272,
+ 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 852176,
+ 1575272, 1575272, 852176, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272, 1575272,
+ 1575272, 1575272, 1575272, 1575272, 1806414, 1806497, 1806251, 1806497, 1806497, 1806497, 1806497,
+ 1806497, 1806497, 1806497, 1806497, 1806497, 1806497, 1806497, 1575272, 1575272, 1575272, 1806497,
+ 1806497, 1575272, 1575272, 1575272, 1806497, 1806497, 1806497, 1575272, 1806497, 1575272, 1806497,
+ 1806497, 1575272, 1575272, 1575272, 1575272, 1806497, 1806497, 1806497, 1806497, 2092598, 1589155,
+ 1806414, 1806450, 1806450, 1806450, 1806450, 1589155, 1589155, 1508983, 1806450, 1806450, 1589155,
+ 1806450, 1806450, 1806414, 1806450, 1589155, 1806414, 1508983, 1589155, 1589155, 1508983, 1589155,
+ 1508983, 1806450, 1806414, 1806450, 1806450, 1806450, 1589155, 1508983, 1806450, 1589155, 1508983,
+ 1589155, 1806450, 1589155, 1589155, 1806414, 1589155, 1508983, 1589155, 1589155, 1806414, 1806450,
+ 1589155, 1806450, 1806414, 1508983, 1589155, 1589155, 1589155, 1806450, 1806450, 1806450, 1806414,
+ 1806450, 1806450, 1806450, 1589155, 1806450, 1806414, 1589155, 1806414, 1589155, 1806450, 1589155,
+ 1806414, 1806450, 1806414, 1589155, 1589155, 1589155, 1806450, 1806450, 1589155, 1806251, 1806450,
+ 1806251, 1806450, 1806251, 1806414, 1589155, 1806414, 1806450, 1589155, 1806450, 1806414, 1589155,
+ 1508983, 1589155, 1589155, 1589155, 1806251, 1806450, 1806450, 1806450, 1806251, 1806450, 1589155,
+ 1806450, 1806450, 1589155, 1806414, 1589155, 1806450, 1589155, 1806414, 1806251, 1589155, 1806414,
+ 1806251, 1806450, 1806251, 1806450, 1806414, 1806450, 1806450, 1806450, 1806450, 1806450, 1806450,
+ 1806450, 1806450, 1806450, 1806450, 1806450, 1806251, 1806450, 1589155, 1806450, 1806251, 1589155,
+ 1806251, 1806414, 1589155, 1589155, 1806414, 1806251, 1806414, 1806450, 1589155, 1589155, 1806414,
+ 1806414, 1589155, 1806414, 1589155, 1589155, 1806414, 1806414, 1806251, 1806450, 1806450, 1806414,
+ 1806450, 1806414, 1589155, 1806414, 173862, 1806414, 1806450, 1806414, 1806450, 1806450, 1806414,
+ 1806251, 1806414, 1806450, 1806251, 1806450, 1589155, 1806414, 1806450, 1806450, 1806414, 1806251,
+ 1806450, 1806251, 1806450, 1806414, 1589155, 1806414, 1589155, 1806450, 1806414, 1589155, 1806414,
+ 1806450, 1589155, 1806450, 1589155, 1589155, 1806414, 1806251, 1589155, 1589155, 1806414, 1806450,
+ 1806450, 1806251, 1589155, 1806450, 1806414, 1806251, 1806414, 1806414, 1806450, 1806414, 1589155,
+ 1806414, 1806251, 1806414, 1806414, 1806450, 1806251, 1806414, 1806251, 1806414, 1806414, 1806414,
+ 1806414, 1806251, 1806251, 1806414, 1806251, 1806251, 1806414, 1806251, 1806251, 1806414, 1806414,
+ 1806414, 1806414, 1806414, 1806414, 1806414, 1806414, 1806414, 1806414, 1806450, 1806251, 1806414,
+ 1806450, 1806414, 1806251, 1806251, 1806414, 1806251, 1806450, 1806414, 1806414, 1806251, 1806414,
+ 1806450, 1806251, 1806414, 1806251, 1806450, 1806414, 1806450, 1806450, 1806251, 1806251, 1806414,
+ 1806414, 1806414, 1806414, 1806251, 1806251, 1806414, 1806414, 1806251, 1806251, 1806251, 1806414,
+ 1806414, 1806414, 1806251, 1806251, 1806450, 1806414, 1806450, 1806450, 1806251, 1806414, 1806251,
+ 1806251, 1806251, 1806414, 1806414, 1806414, 1806414, 1806414, 1806251, 1806251, 1806414, 1806414,
+ 1806251, 1806251, 1806414, 1806251, 1806414, 1806251, 1806414, 1806251, 1806414, 1806414, 1806251,
+ 1806251, 1806251, 1806251, 1806251, 1806251, 1806414, 1806251, 1806251, 1806251, 1806414, 1806251,
+ 1806251, 1806251, 1806414, 1806414, 1806251, 1806251, 1806251, 1806414, 1806414, 1806251, 1806414,
+ 1806251, 1806251, 1806414, 1806414, 1806251, 1806414, 1806414, 1806414, 1806251, 1806251, 1806251,
+ 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251,
+ 1806251, 1806251, 1806251, 1806251, 1806251, 2848360, 1806251, 1806251, 1575272, 1806251, 1806251,
+ 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251,
+ 1806251, 1508983, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806251, 1806450, 1806450,
+ 1806450, 1806450, 1806450, 1806450, 1806450, 1806450, 1806450, 1806450, 1806450, 1806450, 1806450,
+ 1806450, 2848362, 1806450, 1806450, 1806450, 1806450, 1806450, 173862, 173862, 1806450, 1806450,
+ 1806450, 1806450, 1806450, 1806450, 1806414, 1806414, 1806450, 1806414, 1806450, 1806414, 1806414,
+ 1806414, 1806450, 1806414, 1806414, 1806450, 1806450, 1806450, 1806450, 1806498, 1806498, 1575276,
+ 1806498, 1575276, 1806498, 1589155, 1575276, 1575276, 1806498, 1806498, 1806498, 1806498, 1806498,
+ 1806498, 1806498, 1806498, 1806450, 1806498, 1806498, 1806498, 1575276, 1575276, 1575276, 1575276,
+ 1575276, 1575276, 1806498, 1575276, 1575276, 1806498, 1806498, 1806498, 1806498, 1806498, 1806498,
+ 1806498, 1575276, 1575276, 1575276, 1806498, 1806498, 1806498, 1575276, 1575276, 1575276, 1575276,
+ 1806498, 1806498, 1575276, 1575276, 1575276, 1806498, 1806498, 1575276, 1806498, 1575276, 1806498,
+ 1806498, 1575276, 1806498, 1806498, 1806498, 1806498, 1575276, 1806498, 1575276, 1806498, 1575276,
+ 1806498, 1575276, 1806498, 1575276, 1575276, 1806498, 1575276, 1806498, 1575276, 1575276, 1575276,
+ 1806498, 1806498, 1575276, 1806498, 1575276, 1806498, 1575276, 1806498, 1575276, 1806498, 1806417,
+ 1806498, 1575276, 1806498, 1806498, 1806498, 1806498, 1806498, 1806498, 1575276, 1575276, 1806498,
+ 1575276, 1806498, 1575276, 1575276, 1575276, 1806498, 1806498, 1575276, 1806498, 1806498, 1575276,
+ 1806498, 1575276, 1806498, 1806498, 1575276, 1575276, 1806498, 1575276, 1806498, 1806498, 1575276,
+ 1575276, 1806498, 1806498, 1806498, 1575276, 1575276, 1806498, 1806498, 1806498, 1806498, 1806498,
+ 1575276, 1508983, 1508983, 1508983, 1508983, 1508983, 1508983, 1508983, 1508983, 1508983, 1508983,
+ 1806500, 1806500, 1806500, 1508983, 1806500, 1806500, 1508983, 1508983, 1508983, 1508983, 1508983,
+ 1806500, 1806500, 1806500, 1508983, 1806500, 1806500, 1508983, 1575276, 1575276, 1508983, 1508983,
+ 1806500, 1508983, 1806500, 1508983, 1508983, 1508983, 1575276, 1508983, 1806500, 1806500, 1575276,
+ 1508983, 1508983, 1575276, 1508983, 1575276, 1575276, 1508983, 1806500, 1589155, 1508983, 1806500,
+ 1575276, 1508983, 1508983, 1806500, 1575276, 1806500, 1806500, 1806500, 1508983, 1806500, 1575276,
+ 1508983, 1575276, 1575276, 1806500, 1508983, 1806500, 1575276, 1806500, 1575276, 1806500, 1575276,
+ 1575276, 1806500, 1575276, 1806498, 1806500, 1508983, 1806500, 1806500, 1575276, 1806500, 1508983,
+ 1806500, 1575276, 1575276, 1806500, 1508983, 1575276, 1508983, 1806500, 1508983, 1575276, 1508983,
+ 1575276, 1508983, 1575276, 1575276, 1575276, 1806500, 1575276, 1806500, 1508983, 1806500, 1508983,
+ 1806500, 1508983, 1806500, 1508983, 1575276, 1806500, 1508983, 1575276, 1575276, 1806500, 1508983,
+ 1575276, 1508983, 1806500, 1508983, 1806500, 1575276, 1575276, 1575276, 1806500, 1806500, 1806500,
+ 1806500, 1575276, 1806500, 1806500, 1575276, 1806500, 1575276, 1575276, 1575276, 1575276, 1575276,
+ 1806500, 1575276, 1806500, 1508983, 1806500, 1806500, 1508983, 1575276, 1806500, 1508983, 1575276,
+ 1508983, 1508983, 1806500, 1508983, 1806500, 1575276, 1806500, 1806500, 1575276, 1575276, 1508983,
+ 173020, 1806500, 1575276, 1508983, 1575276, 1806500, 173020, 1508983, 1575276, 1575276, 1575276,
+ 1508983, 1589155, 1508983, 1508983, 1589155, 1508983, 1589155, 1508983, 1589155, 1589155, 1589155,
+ 1508983, 1589155, 1508983, 1589155, 1508983, 1589155, 1589155, 1589155, 1508983, 1589155, 1589155,
+ 1589155, 1508983, 1508983, 1589155, 1589155, 1589155, 1508983, 1589155, 1508983, 1589155, 1589155,
+ 1589155, 1589155, 1508983, 1589155, 1508983, 1589155, 1589155, 1589155, 1589155, 1589155, 1508983,
+ 1589155, 1589155, 1589155, 1508983, 1508983, 1508983, 1508983, 1508983, 1508983, 1508983, 1589155,
+ 1508983, 1589155, 1589155, 1508983, 1508983, 1508983, 1589155, 1589155, 1589155, 1508983, 1508983,
+ 173020, 1589155, 1508983, 1589155, 1508983, 1589155, 1508983, 1508983, 1508983, 1508983, 1589155,
+ 1508983, 1508983, 1508983, 1589155, 1508983, 1589155, 1508983, 1508983, 1508983, 1508983, 1508983,
+ 1508983, 1508983, 1589155, 1508983, 1589155, 1508983, 1589155, 1508983, 1589155, 1508983, 1589155,
+ 173020, 173020, 1806497, 1806513, 173020, 1806513, 173020, 173020, 1806513, 1806497, 1806497, 173020,
+ 1806513, 173020, 1806513, 173020, 173020, 1806513, 1806497, 1806513, 173020, 1806513, 173020, 173020,
+ 1806513, 1806497, 173020, 1806513, 173020, 173020, 1806513, 173020, 1806497, 173020, 1806497, 173020,
+ 173020, 173020, 173020, 173020, 173020, 1806513, 1806513, 1806513, 1806497, 1806513, 173020, 1806497,
+ 173020, 173020, 1806497, 173020, 1806513, 173020, 1806513, 1806513, 1806513, 1806513, 1806513, 173020,
+ 1806513, 1806513, 1806497, 1806497, 173020, 1806513, 1806497, 1806513, 173020, 1806497, 173020, 173020,
+ 1806513, 1806497, 173020, 1806513, 173020, 173020, 173020, 173020, 173020, 173020, 1806497, 1806513,
+ 1806513, 173020, 173020, 1806497, 1806513, 1806497, 1806513, 173020, 173020, 1806513, 173020, 1806513,
+ 1806513, 1806513, 173020, 1806513, 261365, 173020, 1806513, 173020, 1806513, 1806513, 173020, 1806513,
+ 173020, 1806513, 1806513, 1806513, 173020, 173020, 173020, 173020, 1806513, 173020, 1806513, 1806513,
+ 173020, 1806513, 1806513, 1806513, 1806513, 173020, 1806513, 173020, 1806513, 173020, 1806513, 1806497,
+ 1806497, 1806497, 1806497, 1806497, 173020, 1806513, 1806513, 1806513, 1806513, 1806513, 1806513,
+ 1806513, 1806513, 1806513, 173020, 173020, 173020, 1806513, 1806513, 1806513, 1806497, 1806513, 173020,
+ 1806513, 1806497, 1806513, 1806513, 173020, 1806497, 1806513, 173020, 1806513, 1806497, 1806417,
+ 1806417, 1806417, 1806417, 1806417, 173020, 173020, 1806417, 1806417, 1575281, 173020, 1806497, 1806497,
+ 1806497, 173020, 1806497, 173020, 1806497, 1806497, 1575281, 1575281, 1806497, 173020, 1806497, 1575281,
+ 1806497, 1806497, 1806497, 1575281, 1806497, 173020, 1575281, 1806497, 1806497, 1806497, 1806417,
+ 1806417, 1806417, 1575281, 1806497, 173020, 1806497, 1575281, 1806497, 1806497, 1806497, 1575281,
+ 1575281, 1806497, 1806497, 173020, 1575281, 1575281, 173020, 1806497, 173020, 1806497, 1806497, 1575281,
+ 1575281, 173020, 1575281, 1806497, 1806497, 1806497, 1575281, 1575281, 1806497, 1806497, 173020,
+ 1806497, 1575281, 1575281, 173020, 1575281, 1575281, 1806497, 1806497, 1575281, 1575281, 1806497,
+ 1806497, 1575281, 173020, 1575281, 1806497, 1575281, 1575281, 173020, 173020, 173020, 173020, 173020,
+ 1806497, 173020, 1575281, 1806497, 1806497, 1806497, 1806497, 1806497, 1806497, 1806497, 1806497,
+ 1806497, 1806497, 1575281, 1806497, 1575281, 1806497, 1806497, 1806497, 1575281, 1575281, 1806497,
+ 1806497, 1575281, 1806497, 1806497, 1806497, 1806497, 1575281, 1806497, 1806497, 1575281, 1575281,
+ 1806497, 1806497, 1806497, 1806497, 1806513, 1806513, 1806497, 1806497, 1806497, 1806417, 1575281,
+ 1575281, 1806417, 1806417, 1806417, 1575276, 1575281, 1806417, 1806417, 1806417, 1575281, 1575281,
+ 1575281, 1806417, 1806417, 1575281, 1806417, 1575281, 1575281, 1575281, 1806498, 1806417, 1806417,
+ 1575281, 1575281, 1806498, 1806498, 1806417, 1806498, 1806498, 1575281, 1575281, 1575281, 1575281,
+ 1806417, 1575281, 1806417, 1575281, 1806498, 1806498, 1806417, 1806498, 1806498, 1575281, 1806498,
+ 1806417, 1575281, 1806417, 1575281, 1806417, 1806417, 1806417, 1806417, 1806417, 1806417, 1806417,
+ 1806417, 1806417, 1806417, 1575281, 1806417, 1575281, 1575281, 1575281, 1575281, 1806417, 1806417,
+ 1806417, 1806417, 1575281, 1575281, 1806417, 1575281, 1806417, 1806417, 1806417, 1806417, 1575281,
+ 1575281, 1806417, 1575281, 1806417, 1575281, 1575281, 261365, 1575281, 1806417, 1575281, 1806498,
+ 1575281, 261365, 1806417, 1806498, 261365, 1806417, 1575281, 261365, 1806417, 1806498, 1806417, 1575281,
+ 1575281, 1806417, 1806498, 1806498, 1806417, 1575281, 1806498, 1575281, 1806498, 1806497, 1575281,
+ 1806417, 1806498, 1575281, 1575281, 1806417, 1806417, 1806498, 1575281, 1806498, 1806498, 1806417};
+
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/Gamma2.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/Gamma2.java new file mode 100644 index 00000000000..352fd261908 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/Gamma2.java @@ -0,0 +1,695 @@ +/*
+ * Created on Jun 13, 2008
+ *
+ * PLACE_YOUR_DISTRIBUTION_STATEMENT_RIGHT_HERE
+ */
+package org.eclipse.osee.define.blam.operation;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class Gamma2 {
+ public static final int[] gammaIds2 =
+ new int[] {1806417, 1806498, 1806498, 1806417, 1806498, 1806417, 1806498, 1806417, 1575281, 1575281, 1575281,
+ 1806417, 1575281, 1575281, 1806498, 1575281, 261365, 1575281, 1806498, 1806417, 1806498, 1806417,
+ 1806417, 1806417, 1806417, 1806417, 1575281, 1806417, 1806417, 1806417, 1806417, 1575281, 1575281,
+ 1575281, 1806498, 1575281, 1575281, 1806498, 1575281, 1575281, 1575281, 1806417, 1806417, 1575281,
+ 1806417, 1806498, 1575281, 1806417, 1806498, 1806498, 1575281, 1806417, 1575281, 1575281, 1806417,
+ 1806498, 1575281, 1806498, 1806498, 1806417, 1575281, 1806417, 1806498, 1806417, 1575281, 1806417,
+ 1806498, 1806417, 1806417, 1575281, 1806498, 1806498, 1575281, 1806498, 1575281, 1806417, 1806417,
+ 1806417, 1806417, 1806417, 1806417, 1806417, 1806417, 1806417, 1806417, 1806417, 1806417, 261365,
+ 173020, 1806417, 1806417, 173020, 1806417, 1806417, 1806417, 261365, 173020, 1806417, 173020, 173020,
+ 1806417, 173020, 173020, 1806417, 173020, 173020, 1806417, 173020, 173020, 1806417, 173020, 1806417,
+ 173020, 173020, 173020, 1806417, 173020, 1806417, 173020, 1806417, 173020, 173020, 1806417, 173020,
+ 173020, 173020, 173020, 173020, 173020, 173020, 173020, 1806417, 173020, 173020, 173020, 1806417,
+ 173020, 1806438, 1807086, 1807086, 1806438, 1807086, 1806252, 1807086, 1806252, 1806438, 1807086,
+ 1806252, 1807086, 1806438, 1806438, 1806438, 1807086, 1807086, 1806252, 1807086, 1806438, 1807086,
+ 1806438, 1806252, 1806252, 1806252, 1806252, 1807086, 1807086, 1806252, 1806252, 1807086, 1806438,
+ 1806252, 1807086, 1806252, 1806252, 1807086, 1806252, 1806252, 1807086, 1806252, 1806438, 1807086,
+ 1807086, 1807086, 1806252, 1806438, 1806252, 1806438, 1806438, 1806252, 1575289, 1806438, 1575289,
+ 1806252, 1807086, 1806449, 1806449, 1807086, 1806438, 1806438, 1806252, 1806252, 1806449, 1806252,
+ 1806449, 1806449, 1807086, 1806449, 1806438, 1807086, 1807086, 1806438, 1806391, 1806391, 1806438,
+ 1806391, 1806252, 1806391, 1806391, 1807086, 1806391, 1806438, 1807086, 1806438, 1806252, 1807086,
+ 1806438, 1806252, 1807086, 1806438, 1806252, 1806252, 1806438, 1807086, 1807086, 1806438, 1806252,
+ 1806252, 1806438, 1806391, 1806438, 1807086, 1806252, 1806391, 1806252, 1806391, 1806391, 1807086,
+ 1806391, 1806252, 1806438, 1806391, 1806438, 1806391, 1806252, 1806391, 1806391, 1807086, 1806252,
+ 1806252, 1806391, 1807086, 1806391, 1806252, 1807086, 1806438, 1806438, 1806391, 1807086, 1806438,
+ 1806391, 1806438, 1806438, 1807086, 1806438, 1806391, 1806438, 1806438, 1806391, 1806391, 1806438,
+ 1806252, 1806391, 1807086, 1806438, 1806438, 1806391, 1806391, 1806438, 1807086, 1806391, 1806391,
+ 1807086, 1575289, 1807086, 1575289, 1806391, 1806245, 1575289, 1806391, 1575289, 1807086, 1575289,
+ 1806245, 1806252, 1806245, 1806391, 1806245, 1806252, 1806389, 1575289, 1575289, 1806391, 1806245,
+ 1575289, 1807037, 1806391, 1806245, 1575289, 1806391, 1575289, 1806391, 1575289, 1806391, 1807037,
+ 1806252, 1807037, 1575289, 1807037, 1806391, 1806391, 1807037, 1806391, 1575289, 1807037, 1806391,
+ 1806391, 1806391, 1575289, 1806252, 1575289, 1806391, 1575289, 1806391, 1806252, 1575289, 1575289,
+ 1806391, 1806252, 1806252, 1806391, 1575289, 1806245, 1806245, 1806245, 1806252, 1806245, 1575289,
+ 1575289, 1806391, 1806391, 1806391, 1806391, 1806252, 1806245, 1806245, 1575289, 1806245, 1575289,
+ 1806391, 1806252, 1806245, 1806391, 1806252, 1807037, 1806245, 1806391, 1575289, 1806252, 1575289,
+ 1806391, 1575289, 1575289, 1807037, 1806245, 1806252, 1806252, 1806391, 1807037, 1806391, 1806245,
+ 1575289, 1575289, 1806391, 1807037, 1807037, 1806391, 1806245, 1807037, 1806391, 1806252, 1806245,
+ 1806252, 1807037, 1806391, 1806252, 1807037, 1575289, 1807037, 1807037, 1575289, 1806245, 1575289,
+ 1806245, 1575289, 1806244, 1806252, 1806245, 1806252, 1575289, 1806391, 1575289, 1575289, 1806252,
+ 1807037, 1575289, 1806252, 1806252, 1806252, 1575289, 1806245, 1806245, 1806391, 1806245, 1806252,
+ 1806391, 1806245, 1806391, 1806252, 1575289, 1806252, 1575289, 1806245, 1806391, 1806252, 1806391,
+ 1806252, 1806391, 1806245, 1806252, 1575289, 1806252, 1806391, 1806391, 1806252, 1806252, 1575289,
+ 1806252, 1807037, 1575289, 1806252, 1806391, 1806252, 1575289, 1806391, 1807037, 1806391, 1807037,
+ 1575289, 1806391, 1806252, 1806391, 1806252, 1807037, 1575289, 1806391, 1807037, 1575289, 1806391,
+ 1807037, 1575289, 1806252, 1807037, 1575289, 1807037, 1807037, 1807037, 1807037, 1806391, 1806391,
+ 1807037, 1806391, 1806252, 1807037, 1806252, 1807037, 1806391, 1806252, 1806252, 1806252, 1807037,
+ 1806391, 1807037, 1807037, 1806391, 1806252, 1807037, 1806391, 1806252, 1575289, 1807037, 1806252,
+ 1806391, 1806252, 1575289, 1806391, 1806252, 1807037, 1806252, 1806391, 1806252, 1806391, 1807037,
+ 1806391, 1575289, 1806252, 1807037, 1575289, 1806391, 1575289, 1806252, 1806252, 1806391, 1575289,
+ 1806391, 1807037, 1575289, 1806252, 1807037, 1575289, 1575289, 1807037, 1806252, 1807037, 1806252,
+ 1575289, 1806252, 1807037, 1575289, 1806252, 1575289, 1806252, 1806252, 1807037, 1807037, 1164028,
+ 1807037, 1806252, 1575289, 1575289, 1807037, 1806252, 1807037, 1575289, 264571, 1807037, 1807037,
+ 1575289, 1806391, 1806252, 1575289, 1807037, 1806252, 1806252, 1575289, 1806252, 1575289, 1806252,
+ 1807037, 1807037, 1807037, 1575289, 1806391, 1575289, 1807037, 1807037, 1806391, 1806252, 1806252,
+ 1806391, 1806252, 1807037, 1575289, 1807037, 1575289, 1806252, 1806449, 1806244, 1806244, 1806449,
+ 1806389, 1806449, 1806389, 1806449, 1806244, 1806449, 1806389, 1806449, 1806244, 1806449, 1806244,
+ 1806244, 1806244, 1806449, 1806449, 1806244, 1806389, 1806244, 1806244, 1806244, 1806244, 1806244,
+ 1806449, 1806449, 1806449, 1806449, 1806449, 1806449, 1806244, 1806244, 1806389, 1806449, 1807089,
+ 1806244, 1806389, 1806449, 1806449, 1806244, 1806244, 1806244, 1806244, 1806244, 1806449, 1806244,
+ 1806449, 1806449, 1806244, 1806244, 1806389, 1806244, 1806244, 1806389, 1806244, 1806449, 1806244,
+ 1806449, 1806389, 1806244, 1806389, 1806449, 1806449, 1806244, 1806449, 1806244, 1806389, 1806244,
+ 1806389, 1806449, 1806244, 1806244, 1806449, 1806244, 1806449, 1806389, 1806244, 1806244, 1806389,
+ 1806244, 1806389, 1806244, 1806389, 1806244, 1806449, 1806449, 1806244, 1806244, 1806244, 1806449,
+ 1806244, 1806244, 1806449, 1806389, 1806449, 1806449, 1806449, 1806449, 1806244, 1806449, 1806244,
+ 1806244, 1806449, 1806449, 1806244, 1806389, 1806243, 1806389, 1806244, 1806244, 1806389, 1806389,
+ 1806449, 1806449, 1806244, 1806449, 1806389, 1806449, 1806449, 1806244, 1806449, 1806244, 1806244,
+ 1806449, 1806244, 1806449, 1806244, 1806449, 1806244, 1806449, 1806244, 1806449, 1806449, 1806244,
+ 1806244, 1806244, 1806449, 1806244, 1806244, 1806449, 1806449, 1806244, 1806244, 1806449, 1806449,
+ 1806449, 1806449, 1806244, 1806449, 1806449, 1806389, 1806244, 1806244, 1806449, 1806244, 1806389,
+ 1806449, 1806449, 1806244, 1806449, 1806389, 1806449, 1806389, 1806449, 1806449, 1806244, 1806244,
+ 1806244, 1806389, 1806449, 1806244, 1806244, 1806389, 1806244, 1806389, 1806244, 1806449, 1806244,
+ 1806244, 1807086, 1806244, 1806449, 1806449, 1806252, 1806252, 1806252, 1806449, 1806244, 1806449,
+ 1806244, 1806449, 1806449, 1806244, 1806449, 1806449, 1806449, 1806449, 1806449, 1806449, 1806449,
+ 1806449, 1806449, 1806449, 1806244, 1806449, 1806244, 1806244, 1806449, 1806449, 1806244, 1806449,
+ 1806449, 1806449, 1806244, 1806244, 1806449, 1806449, 1806449, 1806244, 1806244, 1806449, 1806449,
+ 1806244, 1806244, 1806244, 1806449, 1806449, 1806449, 1806244, 1806244, 1806449, 1806244, 1806244,
+ 1806449, 1806244, 1806449, 1806244, 1806449, 1806449, 1806244, 1806449, 1806449, 1806244, 1806449,
+ 1806449, 1806244, 1806244, 1806449, 1806449, 1806244, 1806438, 1806244, 264571, 1806436, 264571,
+ 1806436, 264571, 264571, 1806436, 264571, 264571, 264571, 264571, 1806436, 1806436, 1806436, 264571,
+ 1806436, 264571, 264571, 264571, 264571, 264571, 1806436, 264571, 1806436, 1806436, 264571, 264571,
+ 264571, 264571, 264571, 264571, 1806436, 264571, 264571, 264571, 1806436, 264571, 1806436, 264571,
+ 264571, 264571, 1806436, 264571, 264571, 264571, 1806436, 264571, 264571, 264571, 1806436, 264571,
+ 264571, 1806436, 264571, 264571, 264571, 1806436, 264571, 1806389, 1806436, 1806436, 1807089, 1806389,
+ 1806389, 1807089, 1806389, 1807089, 264571, 1806436, 1806436, 264571, 1806389, 1806436, 1806389, 264571,
+ 1807089, 1807089, 264571, 1807089, 1806436, 1807089, 1806436, 1806436, 1806436, 1806389, 1806436,
+ 1806389, 264571, 1806436, 264571, 1806436, 1807089, 1806436, 1806436, 1806389, 264571, 1806436, 1806436,
+ 1806436, 1806389, 264571, 1806243, 1806436, 1807089, 264571, 1806436, 1806243, 264571, 1806243, 1807089,
+ 264571, 264571, 1807089, 264571, 1807089, 264571, 264571, 264571, 1806243, 1806243, 264571, 1806243,
+ 264571, 1807089, 1806436, 1806436, 264571, 1806436, 264571, 264571, 1806436, 1806436, 1806436, 1806436,
+ 1806436, 264571, 264571, 1806436, 1806436, 1806436, 264571, 264571, 1806436, 264571, 264571, 1806244,
+ 1806389, 1806244, 1806249, 1806244, 1806389, 1806244, 1806389, 1806244, 1806389, 1806389, 1806389,
+ 1806389, 1806389, 1806389, 1806244, 1806389, 1806244, 1806389, 1806389, 1806389, 1806389, 1806389,
+ 1806389, 1806389, 1806389, 1806244, 1806244, 1806244, 1806389, 1806389, 1543816, 1806389, 1806389,
+ 1806389, 1806389, 1806389, 1806252, 1806389, 1806389, 1806389, 1806389, 1806389, 1164028, 1806389,
+ 1806389, 1806389, 1806389, 1806389, 1806389, 1806389, 1806389, 1806389, 1806436, 264571, 1806436,
+ 1806389, 1806436, 264571, 264571, 264571, 264571, 1806389, 264571, 1806436, 1806389, 1806389, 264571,
+ 1806389, 1806436, 1806389, 1806436, 264571, 1806389, 264571, 1806436, 264571, 1806389, 1806389, 1806389,
+ 1806389, 1806436, 264571, 1806389, 1806389, 1806389, 264571, 1806389, 264571, 1806389, 1806436, 1806389,
+ 264571, 264571, 1806389, 264571, 1806389, 264571, 1806389, 1806389, 1806389, 264571, 1806389, 264571,
+ 1806389, 264571, 264571, 1806389, 1806389, 1806389, 1806389, 1806389, 1806389, 1806389, 1806389, 264571,
+ 1806389, 1806389, 264571, 1806389, 264571, 264571, 1806389, 1806389, 264571, 1806389, 264571, 1806389,
+ 1807084, 1807084, 1806249, 1807089, 1807084, 1806249, 1807089, 1806243, 1807084, 1806243, 1807089,
+ 1807084, 1807089, 1806243, 1807084, 1807089, 1807089, 1807084, 1807089, 1807084, 1806243, 1806249,
+ 1806243, 1806243, 1807084, 1807089, 1806243, 1807084, 1806249, 1807089, 1806243, 1806243, 1807089,
+ 1807084, 1806243, 1807089, 1807089, 1806243, 1807084, 1806243, 1807089, 1806243, 1807089, 1807089,
+ 1806243, 1807084, 1807089, 1806243, 1807089, 1807084, 1806243, 1806243, 1806243, 1806243, 1807089,
+ 1807084, 1807089, 1807084, 1806243, 1806243, 1807089, 1807084, 1807089, 1807084, 1806249, 1807089,
+ 1806249, 1807084, 1807084, 1806243, 1806249, 1807089, 1806249, 1806249, 1807084, 1806249, 1806243,
+ 1807084, 1806243, 1807084, 1806243, 1806249, 1807089, 1807084, 1807089, 1807084, 1806243, 1807084,
+ 1806243, 1807089, 1807084, 1806249, 1806243, 1807089, 1807089, 1806249, 1806249, 1806249, 1807089,
+ 1806243, 1806249, 1807089, 1807084, 1806249, 1807089, 1807089, 1806249, 1807089, 1807084, 1806243,
+ 1807089, 1807089, 1806249, 1806249, 1806243, 1806243, 1806249, 1807089, 1806243, 1806243, 1806243,
+ 1807084, 1807089, 1806249, 1807084, 1806249, 1806438, 1806438, 1806438, 1806243, 1806438, 1807084,
+ 1807089, 1806249, 1806243, 1806243, 1806249, 1806243, 1806249, 1806438, 1806243, 1806438, 1806243,
+ 1807084, 1806243, 1806249, 1806243, 1806243, 1806243, 1806243, 1807084, 1807086, 1807084, 1806243,
+ 1807086, 1807086, 1806243, 1807084, 1807084, 1806243, 1807084, 1807089, 1806243, 1806249, 1807089,
+ 1806243, 1807084, 1807084, 1807089, 1807089, 1807084, 1807089, 1807084, 1807084, 1807084, 1807084,
+ 1806249, 1807089, 1806243, 1807089, 1807089, 1806249, 1807084, 1807089, 1807084, 1807084, 1806243,
+ 1806243, 1806249, 1807084, 1807089, 1806243, 1806243, 1806243, 1806243, 1806243, 1806243, 1807084,
+ 1806249, 1806249, 1807084, 1807084, 1807084, 1807084, 1806243, 1806243, 1807084, 1806243, 1806249,
+ 1807084, 1806249, 1807084, 1807084, 1807084, 1807084, 1806249, 1807084, 1806249, 1806243, 1806249,
+ 1806243, 1807084, 1806249, 1807084, 1807084, 1807084, 1806243, 1807084, 1806249, 1807084, 1807084,
+ 1806243, 1806243, 1807084, 1806243, 1806249, 1806243, 264571, 264571, 1806249, 1807084, 1807089,
+ 1806438, 1807086, 1806438, 264571, 1807089, 1806438, 1807086, 1806438, 1807086, 1806243, 1807089,
+ 1806243, 1806438, 264571, 1807086, 1806243, 1807089, 1807086, 264571, 1807086, 1806438, 1807089,
+ 1806438, 1806438, 1806438, 1807086, 1807086, 264571, 1806438, 1807086, 1806243, 1807089, 1807086,
+ 1806438, 1807086, 1806243, 1807089, 1807086, 1806438, 1807086, 264571, 1807086, 1806438, 1806438,
+ 1807089, 1806438, 1807086, 1806438, 1807086, 1806438, 1807089, 1807086, 1806438, 1807086, 1806438,
+ 1807086, 264571, 1806243, 1807086, 1807086, 1807089, 1806438, 1806438, 1806438, 1806243, 1806438,
+ 1807089, 1806438, 1807086, 1806243, 264571, 264571, 1806438, 1806438, 1806438, 1806243, 264571, 1806438,
+ 264571, 1806438, 1807086, 1806243, 1806243, 1807089, 1807089, 264571, 1807089, 264571, 1807086, 1807089,
+ 1806249, 1806438, 1807089, 1807086, 1806438, 1806243, 1806243, 1807086, 1806438, 1164028, 264571,
+ 1807086, 1806249, 264571, 1806249, 1807089, 1807086, 1806438, 1806249, 1806438, 1806438, 1806243,
+ 1806438, 1806243, 264571, 1807086, 1806438, 1806249, 1807086, 1806249, 1807086, 1806438, 1806249,
+ 264571, 1806243, 264571, 1806243, 1807086, 1807086, 1807084, 1807089, 1807086, 1807089, 1807089,
+ 1807086, 1807086, 1806243, 1807086, 1807089, 1807086, 1807089, 1807089, 1806243, 1807089, 1806438,
+ 1807086, 1807086, 1807084, 1806438, 1807089, 1806243, 1806438, 1807086, 1807089, 1807084, 1807086,
+ 1807084, 1807089, 1807084, 1806438, 1807084, 1807089, 1806243, 1806438, 1807089, 1807086, 1806438,
+ 1807086, 1806438, 1807089, 1807086, 1807089, 1806438, 1807089, 1807086, 1806438, 1807086, 1807089,
+ 1806438, 1807089, 1807089, 1807086, 1807089, 1806438, 1807086, 1807089, 1807086, 1806438, 1806243,
+ 1806243, 1807086, 1807089, 1807086, 264571, 1807089, 1807086, 1806243, 1807086, 1806438, 1806438,
+ 1807089, 1806243, 1807086, 1806243, 1806243, 264571, 1806438, 1807089, 264571, 1807089, 1807086,
+ 1806438, 1806438, 1806243, 1807086, 1806243, 1806438, 264571, 1807086, 1806438, 264571, 1807086,
+ 1806438, 1806243, 1807089, 1806438, 1806243, 264571, 1807089, 1807086, 1806438, 1806243, 1807089,
+ 1806243, 264571, 1807089, 1806438, 1807089, 1807086, 1806438, 1807086, 1806243, 1807086, 1806438,
+ 1806243, 1807086, 1806438, 1807086, 1806438, 1806243, 1807089, 1806438, 1807089, 1807086, 1806438,
+ 1807089, 1807086, 1806438, 1806438, 1806243, 1807089, 1806243, 1807089, 1807086, 1807086, 1807089,
+ 1806436, 1807089, 1807086, 1807089, 1807086, 1806243, 1807089, 1807086, 1806438, 1806243, 1806243,
+ 1806400, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437,
+ 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437,
+ 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437,
+ 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 177459, 1806437, 1806437, 1806437,
+ 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437,
+ 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806437, 1806445, 1806437, 1806445, 1806249,
+ 1806437, 1806437, 1806445, 1806445, 1806445, 1806249, 1806445, 1806249, 1806445, 1806249, 1806249,
+ 1806445, 1806437, 1806445, 1806249, 1806437, 1806437, 1806437, 1806445, 1806249, 1806249, 1806249,
+ 1806445, 1806445, 1806249, 1806437, 1806445, 1806445, 1806445, 1806445, 1806445, 1806437, 1806445,
+ 1806445, 1806445, 1806445, 1806437, 1807088, 1806445, 1807088, 1807088, 1807088, 1806249, 1806249,
+ 1806445, 1806445, 1806249, 1806445, 1806437, 1806445, 1806437, 1806437, 1806445, 1806249, 1806249,
+ 1806445, 1806445, 1806249, 1806249, 1806249, 1806249, 1806445, 1806249, 1806437, 1806249, 1806437,
+ 1806445, 1806249, 1806249, 1807088, 1806445, 1806249, 1807088, 1806249, 1806437, 1807088, 1806249,
+ 1806437, 1807088, 1807088, 1806445, 1806445, 1806445, 1806445, 1806445, 1806249, 1807088, 1806249,
+ 1806445, 1806445, 1807088, 1806249, 1806249, 1807088, 1806445, 1806249, 1806445, 1806246, 1806445,
+ 1806249, 1806249, 1806249, 1806249, 1806249, 1806249, 1806249, 1807088, 1806249, 1806249, 1806249,
+ 1807088, 1807088, 1806249, 1806445, 1807088, 1807088, 1807088, 1806249, 1806249, 1807088, 1807088,
+ 1807088, 1807088, 1806249, 1806445, 1807088, 1807088, 1806445, 1807088, 1806249, 1806445, 1806249,
+ 1806445, 1807088, 1806249, 1806445, 1806249, 1806249, 1806249, 1806249, 1806249, 1807088, 1807088,
+ 1807088, 1806249, 1807088, 1807088, 1806249, 1806249, 1806249, 1807088, 1806249, 1807088, 1806249,
+ 1807088, 1807088, 1807088, 1807088, 1806249, 1807088, 1807088, 1807088, 1807088, 1806249, 1807088,
+ 1806249, 1806249, 1807088, 1807088, 1806249, 1807088, 1806249, 1806249, 1806249, 1806249, 1807088,
+ 1807088, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246,
+ 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246,
+ 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246,
+ 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806246, 1806400, 1806246, 1806246, 177459,
+ 1806246, 1806246, 1806400, 1806246, 1806400, 1806400, 1806400, 1806246, 177459, 177459, 177459, 1806246,
+ 1806246, 177459, 177459, 1806246, 1806246, 177459, 1806400, 177459, 1806246, 1806400, 177459, 1806246,
+ 1806400, 1806246, 1806400, 1806400, 1806400, 177459, 1806246, 1806246, 1806400, 1806400, 1806246,
+ 1806436, 1806436, 1806436, 1806436, 1806246, 1806246, 1806246, 1806436, 1806436, 1806246, 1806436,
+ 1806246, 1806246, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806246, 1806246, 1806436,
+ 1806246, 1806436, 1806436, 1806436, 1806246, 1806436, 1806436, 1806246, 1806246, 1806246, 1806436,
+ 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436,
+ 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436,
+ 1806436, 1806436, 1806436, 1806436, 1806436, 177459, 1806436, 177459, 1806436, 1806436, 1806437,
+ 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806436, 1806400, 1806400,
+ 1806400, 1806400, 1806391, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400,
+ 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 177460, 1806400, 1806400, 1806400,
+ 1806400, 1806400, 177460, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400,
+ 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400,
+ 1806400, 1806400, 1806400, 1806400, 1806400, 1953629, 1807085, 1806400, 1806246, 1806246, 1806400,
+ 177460, 177460, 1806400, 1806400, 1806246, 1806400, 177460, 1806246, 1806246, 1806246, 1806400, 177460,
+ 1806246, 1806400, 177460, 177460, 1806246, 177460, 1806246, 1806400, 1806246, 1806400, 1806400, 177460,
+ 177460, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 1806400, 177460, 1806246, 1806400,
+ 1806400, 1806400, 1806246, 1806246, 1806246, 1806400, 1806400, 1806246, 1806246, 1806400, 1806246,
+ 1806400, 1806400, 1806246, 1806246, 1806246, 1806246, 1806400, 1806246, 1806400, 1806400, 1806246,
+ 1806400, 1806400, 1806246, 1806246, 1806400, 1806246, 1806246, 1806246, 1806400, 1806400, 1806246,
+ 1806246, 1806400, 1806400, 1806400, 1806246, 1806400, 1806246, 1806400, 1806246, 1806400, 1806400,
+ 1806400, 1806400, 1806400, 1806246, 1806400, 1806400, 1806246, 1806400, 1806246, 1806400, 1806400,
+ 1806246, 1806246, 1806246, 1806246, 1806246, 1806400, 1806400, 1806400, 1806246, 1806400, 1806246,
+ 1806400, 1806400, 1806246, 1806246, 1806400, 1806246, 1806400, 1806246, 1806246, 1806246, 1806245,
+ 1806245, 1806245, 177460, 177460, 1806245, 177460, 1806245, 1806245, 177460, 1806245, 1806245, 1806245,
+ 1806245, 1806245, 177460, 177460, 177460, 177460, 1806245, 1806252, 1806245, 1806252, 1806245, 1806252,
+ 1806245, 177460, 1806245, 177460, 1806245, 1806252, 1806252, 1806245, 177460, 177460, 177460, 1806245,
+ 1806245, 177460, 1806245, 177460, 177460, 177460, 1806245, 177460, 1806245, 177460, 177460, 1953629,
+ 1806245, 1806245, 1806245, 1806245, 1806245, 1806245, 1806245, 1806245, 1806245, 177460, 1806391,
+ 1806245, 177460, 177460, 1806245, 1806245, 1806245, 177460, 1806245, 177460, 177460, 1806391, 1806245,
+ 1806245, 177460, 1806245, 1806391, 177460, 1806391, 1806391, 177460, 1806245, 1806391, 1806245, 177460,
+ 1806391, 1806245, 177460, 1806245, 1806245, 177460, 1806391, 177460, 1806245, 177460, 1806391, 1806245,
+ 177460, 1806391, 177460, 1806449, 177460, 1806245, 177460, 1806245, 1806391, 1806391, 177460, 1806391,
+ 177460, 1806245, 1806245, 177460, 1806391, 1806245, 1806391, 1806245, 1806245, 1806245, 1806245,
+ 1806391, 1806245, 1806391, 177460, 1806245, 1806245, 1806245, 177460, 1806245, 1806245, 1806245,
+ 1806391, 1806391, 177460, 177460, 1806391, 1806245, 1806245, 1806391, 1806245, 1806245, 177460, 177460,
+ 1806391, 177460, 1806391, 177460, 1806245, 177460, 177460, 177460, 177460, 1806245, 177460, 177460,
+ 1806245, 1806245, 1806245, 177460, 177460, 177460, 177460, 177460, 177460, 1806245, 1806245, 177460,
+ 177460, 1806245, 1806245, 177460, 1806245, 1806245, 1806245, 1806437, 1806437, 1806245, 1806245, 177460,
+ 1806245, 1806437, 177460, 177460, 1806437, 1806245, 1806437, 1806437, 177460, 1806437, 177460, 1806437,
+ 177460, 1806437, 177460, 177460, 177460, 177460, 1806437, 177460, 177460, 177460, 177460, 177460,
+ 1806437, 177460, 177460, 1806437, 1806437, 177460, 177460, 177460, 177460, 1806437, 177460, 1806437,
+ 177460, 1806437, 177460, 1806437, 1806437, 1806437, 177460, 1806437, 1806437, 177460, 1806437, 1806437,
+ 1806437, 177460, 177460, 177460, 1806437, 177460, 177460, 1806437, 177460, 177460, 177460, 1806437,
+ 177460, 1806437, 1806437, 1806245, 1806245, 177460, 177460, 1806437, 1806437, 1806245, 177460, 1806437,
+ 177460, 1806437, 1806245, 1806437, 177460, 1806245, 177460, 177460, 177460, 1806437, 1806437, 1806245,
+ 1806437, 1806245, 1806437, 177460, 1806437, 1806437, 1806447, 1806468, 1806447, 1806468, 1807085,
+ 1806447, 177455, 177455, 1806468, 1807085, 1806447, 1806468, 1807085, 1806447, 1806468, 1807085, 177455,
+ 1806447, 1806468, 1806447, 1806447, 177455, 177455, 177455, 177455, 1806447, 1806440, 177455, 1806447,
+ 1806447, 177455, 1806447, 177455, 1806447, 177455, 1807085, 177455, 177455, 177455, 1807085, 1806447,
+ 1806447, 1807085, 1806447, 177455, 1807085, 1807085, 177455, 1807085, 1806447, 177455, 1807085, 1807085,
+ 1806447, 1806468, 177455, 1806447, 1806468, 1806447, 1807085, 1806468, 1806468, 1806447, 1807085,
+ 1806447, 1806447, 1806447, 1806447, 1807085, 177455, 1807085, 1806447, 1807085, 1806447, 1807085,
+ 177455, 2848363, 1806447, 1807085, 177455, 1806447, 1806447, 177455, 177455, 1806447, 1807085, 177455,
+ 1806447, 1806447, 177455, 1806447, 1807085, 1806447, 177455, 1807085, 177455, 1806447, 177455, 1807085,
+ 177455, 1806447, 1806447, 1806447, 1806447, 1807085, 1806447, 1806447, 1806447, 1807085, 177458,
+ 1806447, 1806447, 1807085, 1806447, 1806447, 1807085, 1807085, 1806447, 1807085, 1806447, 1806447,
+ 1806447, 1806447, 1807085, 1806447, 1807085, 1806447, 1806447, 1807085, 1806447, 1806447, 1806447,
+ 1807085, 1807085, 1806447, 1807085, 1806447, 1806447, 1806447, 1806447, 1806447, 1807085, 1807085,
+ 1806447, 1806447, 1806447, 1806447, 1806447, 1807085, 1806447, 1806447, 1806447, 1806447, 1806447,
+ 1806447, 1806447, 1806447, 1807085, 1807085, 1807085, 177455, 1807085, 177455, 177455, 177455, 177455,
+ 1807085, 177455, 177455, 1807085, 1807085, 1807085, 1807085, 177455, 1807085, 1807085, 177455, 177455,
+ 1807085, 177455, 177455, 1807085, 1807085, 177455, 177455, 1807085, 1807085, 1807085, 177455, 1807085,
+ 177455, 1807085, 1807085, 1807085, 1807085, 1807085, 177455, 1807085, 177455, 177455, 1807085, 177455,
+ 177455, 1806863, 1807085, 1807085, 1807085, 1807085, 1807085, 1807085, 177455, 177458, 177455, 177455,
+ 1807085, 177455, 177455, 1807085, 177455, 1807085, 177455, 1807085, 177455, 1807085, 1807085, 1807085,
+ 1807085, 1806447, 177455, 177455, 1806447, 1807085, 177455, 1806447, 1806447, 177455, 1806447, 177455,
+ 1807085, 177455, 1806447, 177458, 177455, 1807085, 177458, 1807085, 177455, 1806447, 177455, 1807085,
+ 1806447, 177455, 1807085, 1806447, 177455, 1807085, 1806447, 177455, 1807085, 1807085, 177455, 177455,
+ 1807085, 177455, 1807085, 177455, 177455, 177455, 1807085, 1807085, 1807085, 1807085, 1807085, 177455,
+ 1807085, 177455, 177455, 177455, 177455, 177455, 1807085, 177455, 1807085, 1807085, 1807085, 1807085,
+ 177455, 1807085, 1807085, 1807085, 1807085, 1807085, 1807085, 177455, 1807085, 177455, 177455, 1807085,
+ 177455, 177455, 177455, 177455, 177455, 1807085, 1807085, 177455, 1807085, 177455, 177455, 177455,
+ 177458, 177458, 177458, 1806863, 1806863, 177458, 1806863, 177458, 177458, 1806863, 1806863, 177458,
+ 177458, 1806863, 177458, 177458, 1806863, 177458, 177458, 1806863, 177458, 1806863, 1806863, 1806863,
+ 1806863, 1806863, 1806440, 1806440, 177458, 1806440, 1806863, 1806863, 1806863, 177458, 1806863,
+ 1806440, 1806440, 1806863, 1806863, 1806440, 177458, 1806863, 177458, 1806863, 1806440, 1806863,
+ 1806863, 1806863, 1806863, 1806863, 177458, 1806863, 1806863, 1806863, 1806863, 177458, 1806863,
+ 1806863, 177458, 1806863, 177458, 1806863, 177458, 1806863, 177460, 1806863, 177458, 1806863, 177458,
+ 1806863, 1806863, 1806863, 1806863, 1806863, 1806863, 177458, 1806863, 1806863, 1806863, 1806863,
+ 1806863, 1806863, 177458, 1806863, 1806863, 1806863, 177458, 1806863, 1806863, 177458, 1806863, 1806863,
+ 1806863, 1806863, 1806863, 1806863, 177458, 1806863, 1806863, 1806863, 1806863, 1806863, 1806440,
+ 177458, 177458, 177458, 177458, 1806440, 177458, 177458, 177458, 177458, 1807085, 177458, 1807085,
+ 177458, 1806440, 1806440, 177458, 177458, 1806440, 177458, 1806440, 177458, 177458, 177458, 177458,
+ 177458, 177458, 177458, 177458, 177458, 1953629, 1806440, 1806440, 1806440, 1806440, 1806440, 177458,
+ 1806440, 177458, 177458, 1806440, 177458, 177458, 1806440, 1806440, 177458, 1806440, 177458, 1806440,
+ 177458, 1806440, 1806440, 1806440, 177458, 1806440, 1806440, 177458, 1806440, 1806440, 177458, 1806440,
+ 1806863, 177458, 1806863, 1806863, 177458, 1806863, 177458, 1806440, 1806440, 177458, 177458, 177458,
+ 177458, 1806863, 1806863, 177458, 1806440, 177458, 1806863, 177458, 177458, 1806440, 1806863, 177458,
+ 177458, 177458, 177458, 1806440, 1495752, 177458, 1806863, 177458, 177458, 1806863, 1806440, 1806863,
+ 1806440, 177458, 177458, 177458, 177458, 177458, 1806440, 177458, 1806863, 177458, 1806440, 177458,
+ 177458, 177458, 177458, 1806440, 177458, 1806863, 1806863, 177458, 177458, 1806863, 1806440, 177458,
+ 177458, 177458, 1806440, 177458, 177458, 177458, 1806440, 177458, 1806863, 177458, 1806440, 1806863,
+ 177458, 1806440, 177458, 177458, 177458, 177458, 1806863, 1806440, 1806863, 1806440, 1806863, 1806440,
+ 1806440, 1806440, 177459, 1806464, 1806464, 177459, 1806440, 1806464, 177455, 1806440, 177459, 1806440,
+ 177459, 1806464, 1806440, 1806464, 177459, 177459, 177459, 177459, 177459, 177459, 177459, 177459,
+ 177459, 177459, 177459, 177459, 1806440, 1806464, 177459, 177459, 1806464, 177459, 1806440, 1806464,
+ 1806464, 1806440, 1806464, 1806440, 174666, 1806440, 1806464, 1806464, 1806464, 1806464, 177459,
+ 1806440, 1806440, 1806464, 1806440, 1806440, 1806440, 1806464, 1806464, 1806440, 1806440, 177459,
+ 174666, 177459, 1807088, 1806440, 177459, 177459, 1806464, 1806464, 177459, 1806440, 1806440, 1806440,
+ 1806464, 177459, 1806464, 1806464, 1806464, 177459, 1806464, 1806440, 1806464, 1806440, 1806464, 177459,
+ 1806440, 177459, 177459, 1806440, 1806440, 1806440, 177459, 177459, 1806440, 1806440, 177459, 1806440,
+ 1806440, 177459, 1806440, 1806440, 1806440, 1806440, 1806440, 177459, 1806440, 177459, 1806445, 1806440,
+ 177459, 1806440, 177459, 1806440, 1806440, 1806440, 177459, 1806440, 1806440, 1806440, 177459, 177459,
+ 1806440, 1806440, 177459, 1806440, 1806440, 1806440, 1806440, 1806440, 1806440, 1806440, 1806440,
+ 1806440, 1806440, 177459, 1806440, 177459, 1806440, 177459, 1806440, 1806440, 177459, 1806440, 1806440,
+ 1806440, 1806440, 177459, 1806440, 177459, 177459, 177459, 1806863, 1806863, 177459, 1806863, 177459,
+ 1806863, 1806863, 177459, 1806863, 1806863, 177459, 177459, 1806863, 177459, 1806863, 1806364, 1806364,
+ 1806863, 1806863, 1806364, 1806364, 1806364, 1806364, 1806364, 1575265, 177459, 1806863, 1806863,
+ 177459, 1806863, 1806364, 1806863, 1806863, 1806863, 177459, 177459, 177459, 1806863, 177459, 1806863,
+ 1806863, 1806863, 1806863, 177459, 177459, 1806364, 177459, 1806863, 174666, 1806863, 1806364, 1806863,
+ 177459, 1806863, 177459, 1806863, 1806364, 1806863, 1806364, 177459, 1806364, 1806863, 1806863, 177459,
+ 177459, 177459, 177459, 177459, 177459, 177459, 177459, 177459, 1498880, 177459, 177459, 177459, 177459,
+ 177459, 177459, 177459, 177459, 177459, 177459, 177459, 177459, 177459, 177459, 177459, 177459, 177459,
+ 177459, 177459, 177459, 177459, 177459, 177459, 177459, 1806863, 177459, 1806863, 177459, 177459,
+ 177459, 177459, 177459, 177459, 1806364, 1806364, 1806364, 1806468, 177455, 177455, 177455, 1806445,
+ 1806364, 1806364, 177455, 1806364, 1806468, 177455, 1806364, 1806445, 1806364, 177455, 1806364, 1806468,
+ 1806445, 1806364, 1806364, 1806445, 1806445, 1806468, 1806364, 1806364, 1806468, 1806364, 1806364,
+ 1806445, 1806364, 1806364, 1806364, 1806468, 1806364, 1806364, 1806364, 1806364, 1806364, 1806364,
+ 1806364, 1806364, 839426, 177455, 1806364, 1806364, 1806364, 1806364, 1806364, 1806468, 1806364,
+ 1806468, 1806364, 1806445, 1806364, 1806468, 1806364, 1806468, 1806364, 1806445, 1806468, 839426,
+ 1806445, 1806364, 1806364, 1806445, 1806364, 1806445, 1806364, 1806468, 1806468, 1806445, 1806445,
+ 177455, 1806364, 1806364, 1806468, 177455, 1806468, 1806468, 1807088, 1807088, 839426, 1806364, 177455,
+ 1806364, 1807088, 177455, 1807088, 177455, 1806364, 1806468, 1807088, 1806364, 1807088, 1806364,
+ 1807088, 177455, 1807088, 177455, 1806364, 1806468, 1807085, 1806364, 1807085, 177455, 1807085, 1806468,
+ 1807085, 1806468, 1807085, 177455, 1806364, 1806468, 177455, 1807088, 1806468, 1807088, 1806364,
+ 1806364, 177455, 1807088, 1806468, 1807088, 177455, 1806468, 177455, 1807088, 1806468, 1806468, 1806364,
+ 177455, 1806364, 1806468, 1806468, 1807088, 1806364, 1806468, 177455, 1806468, 1806364, 1807088,
+ 1806445, 1807088, 1806468, 1806364, 1806445, 1806364, 1807088, 1806445, 1806468, 1806445, 1806364,
+ 1807088, 1806468, 1806468, 1806364, 177455, 1806364, 1806445, 1806445, 1806445, 1806445, 1806468,
+ 1806364, 1806468, 177455, 1806445, 1806468, 1806468, 1806364, 1806468, 1806445, 1806364, 1807088,
+ 1806364, 1806468, 1806468, 1806468, 1807088, 1806445, 1806468, 1806445, 1806364, 1806445, 1806445,
+ 1806445, 1806468, 1806468, 1806468, 1806468, 1807088, 1806468, 1806445, 1806445, 1807088, 1806445,
+ 1806445, 1806445, 1806468, 1807088, 1806445, 1806468, 1806445, 1806468, 1806445, 1806445, 1806468,
+ 1806468, 1806445, 1806468, 1806445, 1807088, 1807088, 1806468, 1806445, 1806468, 1806445, 1806445,
+ 1806468, 1806445, 1806445, 1807088, 1806468, 1806468, 1806445, 1807088, 1806468, 1807088, 1806445,
+ 1807088, 1807088, 1806445, 1806468, 1806468, 1806445, 1806468, 1807088, 1806468, 1806445, 1806445,
+ 1806468, 1806468, 1806445, 1807088, 1806445, 1806445, 1806468, 1806468, 1806468, 1806468, 1807088,
+ 1806364, 1806468, 1575265, 1807088, 1806364, 1806445, 1806468, 1807088, 1806468, 1806364, 1806445,
+ 1806468, 1806468, 1807088, 1806468, 1807088, 1806364, 1806364, 1806468, 1807088, 1806364, 1806468,
+ 1806364, 1807088, 1806364, 1806445, 1806364, 1807088, 1807088, 1806364, 1807088, 1806364, 1575265,
+ 1807088, 1575265, 1806445, 1806468, 1807088, 1806445, 1807088, 1806445, 1807088, 1806364, 1806468,
+ 1806364, 1807088, 1806364, 1807088, 1806364, 1806364, 1807088, 1806468, 1807088, 1806468, 1806364,
+ 1806468, 1807088, 1807088, 1806364, 1806364, 1806364, 1806468, 1806468, 1806468, 1807088, 1806364,
+ 1807088, 1807088, 1807088, 1807088, 1806468, 1806445, 1806468, 1806364, 1806364, 1575265, 1806445,
+ 1575265, 1806468, 1806468, 1498880, 1806468, 1807088, 1806364, 1806364, 1806364, 1575265, 1806468,
+ 1806364, 1806364, 1807088, 1806468, 1806364, 1806445, 1806468, 1812924, 1575265, 1806445, 1806468,
+ 1575265, 1807088, 1806468, 1806364, 1575265, 1806468, 1806364, 1806364, 1806364, 1806445, 1806468,
+ 1807088, 1806364, 1806445, 1806364, 1807088, 1806468, 1575265, 1806468, 1806445, 1807088, 1807088,
+ 1806364, 1807088, 1806468, 1806468, 1806364, 1807088, 1806445, 1807088, 1806468, 1806445, 1807088,
+ 1807088, 1806468, 1806468, 1575265, 1806445, 1806468, 1806468, 1806364, 1575265, 1807088, 1806413,
+ 1807084, 1806439, 1806413, 1807084, 1543816, 1575265, 1575265, 1807084, 1575265, 1806439, 1575265,
+ 1806439, 1575265, 1806456, 1806413, 1806456, 1807084, 1806413, 1575265, 1806456, 1575265, 1806439,
+ 1575265, 1806456, 1806439, 1806456, 1575265, 1806413, 1806439, 1806456, 1806456, 1806413, 1807084,
+ 1806413, 1806456, 1575265, 1807084, 1806439, 1575265, 1806456, 1806413, 1806456, 1806439, 1575265,
+ 1575265, 1575265, 1575265, 1575265, 1807084, 1575265, 1575265, 1806439, 1807084, 1575265, 1806413,
+ 1575265, 1806439, 1575265, 1575265, 1575265, 1575265, 1806439, 1807084, 1575265, 1806439, 1806413,
+ 1806439, 1807084, 1807084, 1575265, 1807084, 1575265, 1575265, 1575265, 1807084, 1575265, 1575265,
+ 1575265, 1807084, 1575265, 1575265, 1807084, 1575265, 1806413, 1575265, 1806413, 1807084, 1806413,
+ 1806439, 1806413, 1806439, 1575265, 1575265, 1806439, 1806413, 1806413, 1806439, 1575265, 1575265,
+ 1807084, 1575265, 1806456, 1575265, 1806439, 1806456, 177457, 177457, 1806464, 1806439, 177457, 1806439,
+ 1806456, 1806439, 1806456, 1575265, 1806439, 1806439, 1806456, 1806439, 1575265, 1807084, 1807084,
+ 1806456, 1575265, 1806413, 1806456, 1806413, 1806456, 1575265, 177457, 1806439, 1806456, 1806439,
+ 1575265, 1806456, 1806456, 1806439, 1806456, 1806439, 1575265, 1806456, 1807084, 1806439, 1575265,
+ 1806439, 1575265, 1807084, 1806456, 1806456, 177457, 1575265, 1807084, 177457, 1575265, 1806439,
+ 1807084, 1575265, 1807084, 177457, 1806439, 1575265, 177457, 1807084, 1806439, 1806456, 1806456,
+ 1807084, 1806439, 1806456, 177457, 1575265, 1807084, 1806439, 1806456, 177457, 1806456, 1575265,
+ 1807084, 1806456, 1807084, 1806439, 177457, 1575265, 1806439, 1807084, 1806456, 1575265, 1807084,
+ 1806439, 1806439, 1806439, 1807084, 1807084, 1575265, 1575265, 1806456, 1806439, 1806456, 1807084,
+ 1575265, 1806439, 1806439, 1806439, 1806439, 1807084, 1806439, 1806456, 1806456, 1806456, 1806456,
+ 1575265, 1807084, 1807084, 1575265, 1806439, 1806439, 1575265, 1806456, 1806456, 1806456, 1807084,
+ 1806439, 1806456, 1575265, 1806456, 1806456, 1806456, 1807084, 1806439, 1806456, 1807084, 1806439,
+ 1806439, 1806456, 1806439, 1806456, 1806439, 1807084, 1806439, 1806439, 1806413, 1806439, 1806439,
+ 1806439, 1806413, 1806413, 1806439, 1498880, 1806413, 1806439, 1806439, 1806413, 1806413, 1806439,
+ 1806439, 1806413, 1806439, 1806413, 1806413, 1806413, 1806439, 1806413, 1806439, 1806413, 1806439,
+ 1806413, 1806439, 1806439, 1806439, 1806439, 1806413, 1806439, 1806439, 1806413, 1806413, 1806439,
+ 1806413, 1806439, 1806439, 1806439, 1806413, 1806413, 1806413, 1806413, 1806439, 1806439, 1806413,
+ 1806413, 1806439, 1806439, 1806413, 1806413, 1806413, 1806413, 1806413, 1575265, 1806439, 1575265,
+ 1806439, 1806413, 1806413, 1806439, 1806413, 1806413, 1806439, 1806439, 1806413, 1806413, 1806413,
+ 1806413, 1806413, 1806413, 1806413, 1806439, 1806439, 1806439, 1806413, 1806439, 1806439, 1806439,
+ 1806439, 1806439, 1806439, 1806439, 1806413, 1806413, 1806439, 1806413, 1806439, 1806413, 1806413,
+ 1806413, 1575265, 1806413, 1806413, 1575265, 1806413, 1575265, 1806413, 1806413, 1575265, 1806413,
+ 1806413, 1806413, 1575265, 1575265, 1575265, 1806439, 1806439, 1575265, 1806439, 1806439, 1575265,
+ 1575265, 1806439, 1575265, 1575265, 1575265, 1812929, 1812929, 1806413, 1812929, 1575265, 1575265,
+ 1806413, 1575265, 1575265, 1806413, 1806413, 1812929, 1575265, 1575265, 1575265, 1575265, 1575265,
+ 1575265, 1575265, 1806413, 1806413, 1812929, 1812929, 1812929, 1806413, 1575265, 1575265, 1806413,
+ 1575265, 1812929, 1575265, 1575265, 1575265, 1812929, 1806413, 1806464, 177457, 177457, 177457, 177457,
+ 177457, 1806464, 177457, 177457, 177457, 1806464, 1806464, 177457, 1543816, 1806464, 1806413, 1806413,
+ 1806464, 1806464, 1806413, 1806413, 1806413, 177457, 177457, 1806464, 1806464, 177457, 1806464, 177457,
+ 177457, 1806464, 177457, 1806464, 177457, 1806464, 177457, 1806464, 1806464, 1806413, 177457, 1806413,
+ 177457, 1806413, 177457, 177457, 177457, 177457, 1806413, 1806413, 1806413, 1806413, 1806413, 1806413,
+ 1806413, 1806413, 177457, 1806413, 1806413, 177457, 1806413, 1806413, 1806413, 177457, 1806413, 1806413,
+ 1806413, 177457, 1806464, 1806413, 1806464, 1806413, 1806413, 1806413, 1806464, 1806413, 1806464,
+ 1806413, 177457, 1806413, 1806413, 1806413, 1806464, 1806413, 177457, 1806413, 1806413, 1806464,
+ 1806464, 1806464, 1806464, 177457, 177457, 1806464, 1806464, 1806464, 1806464, 1806464, 177457, 1806464,
+ 177457, 177457, 177457, 177457, 1806364, 177457, 177457, 1806464, 177457, 177457, 177457, 1806464,
+ 1806464, 1806464, 1806464, 1806464, 177457, 177457, 1806464, 1806464, 177457, 1806464, 177457, 1806464,
+ 177457, 1806464, 177457, 177457, 1806464, 177457, 1806464, 1806464, 177457, 177457, 177457, 177457,
+ 177457, 1806464, 177457, 1806464, 1806464, 1806464, 177457, 1806464, 177457, 1806464, 1806464, 177457,
+ 1806464, 1806464, 1806464, 177457, 1806464, 177457, 1806464, 1806464, 177457, 1806464, 1806464, 177457,
+ 1806464, 1806464, 177457, 1806468, 177457, 1806464, 177457, 1806464, 177457, 177457, 1806464, 177457,
+ 1806464, 1806464, 177457, 1806464, 177457, 177457, 177457, 177457, 177457, 1806464, 177457, 177457,
+ 177457, 177457, 1812929, 1807084, 177457, 177457, 1806464, 177457, 177457, 177457, 1806464, 177457,
+ 1806464, 177457, 1806464, 177457, 1806464, 177457, 177457, 1806464, 177457, 1806464, 1806464, 177457,
+ 177457, 177457, 1806464, 177457, 1806464, 177457, 1806464, 1806464, 1806464, 177457, 1806464, 177457,
+ 177457, 1806464, 177457, 1806464, 1806464, 177457, 177457, 177457, 177457, 1806464, 1806464, 1806464,
+ 1806464, 1806464, 177457, 177457, 177457, 177457, 1806464, 1806463, 1806463, 1806463, 1806463, 1806463,
+ 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 177458, 177458, 177458, 1575289, 1806463,
+ 177458, 1806463, 1806463, 177458, 177458, 1806463, 1806463, 1806463, 1806463, 177458, 1806463, 1806463,
+ 1806463, 177458, 1806463, 1806463, 1806463, 177458, 177458, 1806463, 1806463, 1806463, 1806447, 1806456,
+ 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463,
+ 1806463, 1806463, 1807037, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463,
+ 1806463, 1806463, 1806463, 1806463, 177457, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463,
+ 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 177457, 177457, 177457, 1806456, 1806456,
+ 1806456, 1806456, 1806456, 852199, 1806456, 1806456, 1806456, 1806456, 1806456, 1806456, 1806456,
+ 1806456, 1807037, 1807037, 1807037, 1807037, 1807037, 1807037, 1807037, 1807037, 1807037, 852199,
+ 1806447, 1806456, 1806456, 1806456, 852199, 1806456, 1806456, 1807037, 1806456, 1806456, 1575289,
+ 1806456, 1807037, 1806447, 1575289, 1807037, 1807037, 1806456, 1806447, 1806456, 1807037, 1807037,
+ 1575289, 1575289, 1806456, 1575289, 1806447, 1806456, 1806456, 1806447, 1806456, 1806456, 1807037,
+ 1806456, 1575289, 1807037, 1806447, 1575289, 1806456, 1806456, 1575289, 1806456, 1575289, 1806456,
+ 1575289, 1807037, 1806456, 1575289, 1806456, 1806456, 1807037, 1575289, 1806456, 1807037, 1806456,
+ 1806456, 1575289, 1807037, 1575289, 1807037, 1575289, 1806456, 1575289, 1575289, 1806456, 1807037,
+ 1575289, 1806456, 1806456, 1806456, 1806447, 1806456, 1806447, 1807037, 1806447, 1575289, 1575289,
+ 1806447, 1575289, 1806456, 1575289, 1806447, 1806456, 1806456, 1806456, 1806447, 1575289, 1806447,
+ 1806456, 1807037, 1806456, 1575289, 1807037, 1806456, 1807037, 1575289, 1806456, 1806447, 1807037,
+ 1806447, 1575289, 1806447, 1806456, 1807037, 1807037, 1806456, 1806456, 1575289, 1806447, 1807037,
+ 1807037, 1807037, 1807037, 1807037, 1807037, 1807037, 1806447, 1807037, 1806456, 1807037, 1806456,
+ 1806456, 1806447, 1807037, 1806447, 1807037, 1806456, 1806447, 1807037, 1575289, 1807037, 1807037,
+ 1806456, 1807037, 1807037, 1807037, 1806447, 1575289, 1806456, 1575289, 1807037, 1807037, 1575289,
+ 1806456, 1807037, 1806447, 1806447, 1575289, 1806456, 1807037, 1806456, 1575289, 1806447, 1806447,
+ 1575289, 1806456, 1806447, 1807037, 1806456, 1806447, 1806447, 1807037, 1806456, 1807037, 1807037,
+ 1575289, 1806447, 1806456, 1807037, 1807037, 1807037, 1806463, 261366, 1806463, 1806463, 261366,
+ 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463,
+ 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463,
+ 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463,
+ 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 1806463, 467177, 1806463, 1806463, 1806463,
+ 1806463, 852192, 1806463, 1806463, 1806463, 1806463, 261366, 261366, 1806501, 261366, 261366, 261366,
+ 261366, 261366, 261366, 261366, 261366, 261366, 261366, 261366, 1806501, 1806501, 1806501, 261366,
+ 1806501, 1806501, 1806501, 261366, 1806501, 1806501, 261366, 1806501, 261366, 261366, 261366, 1806501,
+ 261366, 261366, 1806501, 261366, 261366, 261366, 1806460, 261366, 1806501, 1806460, 261366, 1806460,
+ 1806460, 1806501, 1806460, 1806501, 261366, 1806501, 261366, 261366, 261366, 1806501, 261366, 1806501,
+ 1806501, 1806501, 1806501, 261366, 261366, 1806501, 1806501, 261366, 261366, 261366, 1806501, 1806501,
+ 1806501, 261366, 1806501, 1806501, 1806501, 1806460, 1806501, 1806460, 1806501, 1806501, 1806460,
+ 1806460, 261366, 1806460, 261366, 261366, 261366, 1806522, 1806522, 1806522, 261366, 1806522, 261366,
+ 1806522, 177461, 261366, 1806522, 1806522, 1806522, 261366, 1806522, 1806522, 261366, 261366, 261366,
+ 261366, 261366, 1806522, 261366, 1806522, 1806522, 1806522, 261366, 1806522, 261366, 1806522, 1806522,
+ 1806522, 1806522, 1806522, 1806522, 1806522, 261366, 261366, 1806522, 1806501, 1806501, 1806522,
+ 1806501, 1806522, 1806501, 261366, 261366, 1806501, 261366, 1806501, 1806501, 1806501, 261366, 1806460,
+ 261366, 1806460, 1806460, 1806460, 1806460, 261366, 1806460, 1806460, 1806460, 261366, 261366, 1806460,
+ 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 261366, 1806460, 261366, 261366, 467177, 1806460,
+ 1806460, 1806460, 1806460, 261366, 1806460, 1806460, 261366, 1806460, 1806460, 1806460, 1806460,
+ 1806460, 261366, 261366, 1806460, 1806460, 177461, 1806460, 261366, 261366, 1806460, 1806460, 1806460,
+ 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460,
+ 1806460, 1806460, 1806460, 177461, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460,
+ 261366, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460,
+ 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460, 1806460,
+ 1806463, 1806460, 1806522, 1806460, 1806460, 1806522, 1806460, 1806460, 1806460, 1806460, 1806522,
+ 1806522, 1806522, 1806460, 1806460, 1806522, 1806522, 1806522, 1806522, 1806522, 1806460, 1806460,
+ 1806460, 1806522, 1806522, 1806460, 1806522, 1806522, 1806522, 1806460, 1806522, 1806522, 1806501,
+ 1806501, 1806501, 1806460, 1806460, 1806501, 1806460, 1806460, 1806501, 1806460, 1806501, 1806460,
+ 1806501, 1806460, 1806501, 1806460, 1806460, 1806501, 1806460, 1806460, 1806522, 1806460, 1806522,
+ 1806501, 1806522, 1806460, 1806460, 1806501, 1806501, 1806522, 1806501, 1806501, 1806460, 1806522,
+ 1806501, 1806460, 1806501, 1806522, 1806460, 1806522, 1806460, 1806522, 1806522, 1806501, 1806522,
+ 1806522, 1806501, 1806522, 1806501, 1806522, 1806501, 1806522, 1806522, 1806522, 1806522, 1806501,
+ 1806501, 1806522, 1806522, 1806522, 1806501, 1806501, 1806522, 1806522, 1806501, 1806501, 1806522,
+ 1806501, 1806501, 1806522, 1806522, 1806522, 261366, 261366, 261366, 261366, 1806522, 1806522, 261366,
+ 1806522, 261366, 261366, 1806522, 261366, 1806501, 261366, 1806522, 261366, 1806501, 1806522, 1806501,
+ 1806522, 1806501, 1806501, 1806522, 1806522, 1806522, 1806522, 1806501, 1806501, 1806522, 1806501,
+ 1806522, 1806501, 1806501, 1806522, 1806522, 1806522, 1806522, 261366, 1806501, 1806522, 261366, 261366,
+ 1806522, 261366, 1806501, 261366, 1806522, 261366, 1806501, 261366, 1806522, 1806501, 261366, 261366,
+ 1806522, 261366, 1806501, 261366, 1806501, 1806501, 1806501, 261366, 261366, 1806522, 1806501, 261366,
+ 1806501, 1806501, 1806501, 261366, 261366, 1806522, 1806501, 1806501, 1806501, 1806501, 1806522,
+ 1806501, 1806501, 1806501, 1806522, 1806501, 1806522, 1806522, 261366, 1806522, 261366, 1806522,
+ 1806522, 261366, 1806522, 1806501, 261366, 1806501, 261366, 1806522, 1806501, 1806522, 1806501, 261366,
+ 1806522, 1806522, 1806501, 261366, 261366, 1806522, 261366, 1806501, 261366, 1806501, 1806522, 1806501,
+ 261366, 1806501, 261366, 1806501, 1806522, 1806501, 1806501, 1806522, 1806501, 1806501, 261366, 1806522,
+ 261366, 261366, 1806501, 1806501, 261366, 1806522, 1806501, 261366, 1806522, 1806501, 1806522, 1806522,
+ 1806522, 1806522, 261366, 1806501, 261366, 1806522, 1806522, 261366, 1806461, 1806461, 1806461, 1806461,
+ 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461,
+ 1806461, 1806461, 1806461, 1806461, 1806461, 1806501, 1806461, 1806461, 1806461, 1806461, 1806461,
+ 1806461, 1806522, 852192, 852192, 1806461, 1806461, 1806461, 1806461, 467177, 1806461, 1806461, 1806461,
+ 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461,
+ 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461,
+ 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461,
+ 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461,
+ 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461, 1806461,
+ 1806461, 1806461, 1806461, 1806460, 1806461, 1806461, 1806461, 1806461, 1589154, 1806461, 1806461,
+ 1589154, 1806461, 1806461, 1806461, 1589154, 1806461, 1589154, 1589154, 1589154, 1806461, 1806461,
+ 1806461, 1589154, 1589154, 1589154, 1806461, 1812924, 1806461, 1589154, 1812924, 1812924, 1589154,
+ 1589154, 1806461, 1812924, 1589154, 1589154, 1589154, 1812924, 1589154, 1812924, 1806461, 1812924,
+ 1812924, 1589154, 1589154, 1589154, 1812924, 1589154, 1812924, 1589154, 1589154, 1806461, 1589154,
+ 1589154, 1589154, 1589154, 1589154, 1589154, 1589154, 1812924, 1589154, 1589154, 1589154, 1812924,
+ 1806461, 1137539, 1812924, 1812924, 1806461, 1812924, 1812924, 1812924, 1812924, 1806461, 1812924,
+ 1589154, 1589154, 1812924, 1589154, 1806461, 1812924, 1806461, 1812924, 1812924, 1589154, 1589154,
+ 1812924, 1806461, 1812924, 1806461, 1806461, 1589154, 1812924, 1812924, 1812924, 1589154, 1812924,
+ 1812924, 1812924, 1812924, 1589154, 1812924, 1589154, 1812924, 1812924, 1812924, 1812924, 1589154,
+ 1812924, 1589154, 1589154, 1812924, 1812924, 1812924, 1589154, 1812924, 1589154, 1589154, 1812924,
+ 1589154, 1589154, 1812924, 1812924, 1812924, 1812924, 1812924, 1812924, 1806914, 2078493, 1812924,
+ 2078493, 2078493, 2078493, 2078493, 2078493, 2078493, 1812924, 2078493, 2078493, 1812924, 2078493,
+ 2078493, 2078493, 1812924, 2078493, 1812924, 2078493, 2078493, 2078493, 1812924, 2078493, 2078493,
+ 2078493, 2078493, 2078493, 2078493, 2078493, 1806453, 2078493, 2078493, 1806453, 1806453, 1806453,
+ 2078493, 2078493, 2078493, 1806453, 2078493, 2078493, 1806453, 2078493, 2078493, 1806453, 1806453,
+ 2078493, 1806453, 2078493, 1812924, 2078493, 1812924, 1806453, 1812924, 2078493, 2078493, 2078493,
+ 2078493, 1812924, 2078493, 1812924, 2078493, 1812924, 1806453, 1806453, 1806453, 1806453, 1806453,
+ 1806453, 1806453, 1806453, 1806453, 1806453, 1806453, 1806453, 1806453, 1137539, 1806453, 1806453,
+ 2078493, 2078493, 2078493, 2078493, 2078493, 1806453, 2078493, 2078493, 1806453, 2078493, 1806453,
+ 1806453, 1806453, 1806453, 2078493, 1806453, 2078493, 1806453, 1806453, 1806453, 1806453, 1806453,
+ 1806453, 1806453, 1806453, 2078493, 1806453, 1806453, 1806453, 1806453, 2078493, 2078493, 1806453,
+ 1806453, 2078493, 1806461, 2078493, 2078493, 1806453, 2078493, 2078493, 1812924, 1812924, 1812924,
+ 1806453, 1812924, 2078493, 1806453, 1806453, 2078493, 1806453, 1806453, 1812924, 1812924, 1806453,
+ 1589154, 1589154, 1812924, 1806453, 2078493, 1806453, 1806453, 1812924, 1812924, 1812924, 1589154,
+ 2078493, 1812924, 1589154, 1589154, 1589154, 1589154, 2078493, 1589154, 1812924, 2078493, 1589154,
+ 1806453, 2078493, 1812924, 1812924, 1812924, 1812924, 1812924, 1806453, 2078493, 1806453, 1589154,
+ 1812924, 1589154, 1589154, 1589154, 2078493, 1812924, 1812924, 1806453, 1812924, 1806453, 1812924,
+ 1589154, 1806453, 2078493, 1806453, 1589154, 1806453, 1812924, 1806453, 1806453, 1812924, 1806453,
+ 1812924, 2078493, 1806453, 2078493, 1812924, 1812924, 1812924, 1589154, 1806453, 1589154, 1806453,
+ 2078493, 1806453, 1806453, 2078493, 1806453, 1812924, 1806453, 1812924, 1589154, 1812924, 1806453,
+ 1806453, 1812924, 1812924, 1806453, 2078493, 1589154, 2078493, 1806453, 1589154, 1806453, 1589154,
+ 1806453, 1806453, 1812924, 1812924, 2078493, 1806453, 1812924, 1806453, 1812924, 1589154, 1806453,
+ 1812924, 1812924, 1589154, 1589154, 1806453, 1806453, 1589154, 2078493, 2078493, 1589154, 2078493,
+ 2078493, 1589154, 1812924, 2078493, 1589154, 2078493, 1806453, 1812924, 2078493, 1812924, 2078493,
+ 1589154, 2078493, 1806453, 1806453, 1589154, 1589154, 1812924, 1589154, 1589154, 1812924, 1589154,
+ 1806453, 2078493, 1806453, 1812924, 1812924, 1806453, 1589154, 2078493, 1589154, 1589154, 1589154,
+ 1589154, 2078493, 2078493, 1589154, 2078493, 2078493, 1806453, 2078493, 1806453, 2078493, 2078493,
+ 1812924, 2078493, 1806453, 1806453, 2078493, 1589154, 1812924, 1812924, 2078493, 1589154, 1589154,
+ 2078493, 2078493, 1806453, 1806453, 2078493, 1812924, 2078493, 1589154, 2078493, 2078493, 1589154,
+ 2078493, 2078493, 2078493, 1812924, 1806453, 1589154, 1589154, 1589154, 1812924, 1589154, 1589154,
+ 1806453, 1589154, 1589154, 1589154, 1589154, 1812924, 1589154, 1806453, 1806453, 1589154, 1812924,
+ 1812924, 1812924, 1589154, 1806453, 1589154, 1589154, 2078493, 1589154, 2078493, 1806453, 1806453,
+ 1806453, 1806453, 1806453, 1495752, 1806453, 1806453, 1806453, 1806453, 1806453, 1806453, 1806453,
+ 177461, 1806453, 1806453, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461,
+ 2078493, 2078493, 177461, 177461, 2078493, 2078493, 177461, 2078493, 2078493, 2078493, 177461, 2078493,
+ 177461, 2078493, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461,
+ 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461, 177461,
+ 177461, 177461, 177461, 177461, 177461, 177461, 177461, 1806914, 177461, 177461, 1806914, 1806914,
+ 177461, 177461, 1806914, 1806914, 1806914, 177461, 177461, 1806914, 177461, 177461, 177461, 1806914,
+ 177461, 1806914, 1806914, 177461, 1806914, 177461, 1806914, 1806914, 177461, 1806914, 1806914, 177461,
+ 177461, 177461, 177461, 1806914, 177461, 1806914, 1806914, 177461, 1806914, 177461, 177461, 177461,
+ 177461, 1806914, 1806914, 177461, 1806914, 177461, 177461, 177461, 177461, 1806914, 177461, 1806914,
+ 1806914, 1806914, 177461, 1806914, 1806914, 1806914, 177461, 1806914, 177461, 1806459, 1806459, 1806914,
+ 1806459, 1806459, 1806459, 1806914, 177461, 1806914, 177461, 1806914, 177461, 1806459, 1806914, 1806459,
+ 1806914, 177461, 1806459, 1806914, 177461, 177461, 1806459, 1137539, 177461, 1806459, 1806914, 1806459,
+ 1806914, 177461, 1806914, 1806459, 177461, 177461, 1806459, 1806914, 177461, 177461, 1806459, 1806914,
+ 177461, 1806459, 1806914, 177461, 177461, 177461, 1806914, 177461, 1806914, 177461, 1806914, 177461,
+ 1806914, 177461, 1806914, 177461, 1806914, 1806459, 1806914, 1806903, 1806459, 1806903, 1806459,
+ 1806903, 1806914, 1806914, 1806914, 1806903, 1806903, 177461, 1806903, 1806459, 177461, 1806914, 177461,
+ 1806914, 1806903, 1806914, 1806903, 1806459, 1806459, 1806914, 1806914, 1806914, 1806459, 1806914,
+ 1806914, 177461, 1806903, 177461, 177461, 1806914, 177461, 1806914, 177461, 1806914, 1806914, 1806459,
+ 1806459, 177461, 1806459, 1806459, 1806914, 1806914, 1806914, 1806914, 1806914, 1806914, 177461, 177461,
+ 1806914, 1806903, 177461, 1806903, 1806914, 1806903, 1806459, 1806903, 1806914, 1806459, 1806903,
+ 1806459, 1806903, 1806903, 1806459, 1806914, 1806903, 1806914, 1806903, 1806914, 1806914, 1806459,
+ 1806903, 1806459, 1806459, 1806459, 1806914, 1806459, 1806903, 1806914, 1806459, 1806914, 1806903,
+ 1806914, 1806459, 1806903, 177461, 1806914, 177461, 1806914, 1806459, 1806914, 1806459, 1806459, 177461,
+ 1806459, 1806903, 177461, 2078493, 177461, 1806914, 1806903, 1806459, 1806914, 1806903, 1806903, 177461,
+ 1806903, 177461, 1806914, 1806903, 1806914, 1806459, 1806903, 1806914, 1806459, 1806903, 1806903,
+ 1806903, 1806459, 1806459, 1806903, 1806459, 1806903, 1806459, 1806903, 1806459, 1806914, 1806459,
+ 1806903, 1806903, 1806459, 1806459, 1806459, 1806903, 1806459, 1806903, 1806459, 1806903, 1806459,
+ 1806459, 1806903, 1806459, 1806459, 1806914, 1806914, 1806903, 1806459, 1806459, 1806903, 1806914,
+ 1806453, 1806903, 1806903, 1806459, 1806914, 1806903, 1806903, 1806459, 1806914, 1806903, 1806459,
+ 1806903, 1806914, 1806903, 1806914, 1806903, 1806903, 1806903, 1806914, 1806903, 1806459, 1806914,
+ 1806914, 1806903, 1806459, 1806903, 1806459, 1806903, 1806914, 1806903, 1806459, 1806903, 1806903,
+ 1806459, 1806903, 1806914, 1806903, 1806459, 1806459, 1806914, 1806903, 1806903, 1806903, 1806459,
+ 1806459, 1806903, 1806903, 1806903, 1806914, 1806903, 1806903, 1806903, 1806903, 1806914, 1806459,
+ 1806903, 1806914, 1806903, 1806903, 1806459, 1806459, 1806459, 1806914, 1806903, 1806459, 1806903,
+ 1589154, 1806459, 1806459, 1806903, 1806459, 1806459, 1806903, 1806459, 1806903, 1806459, 1806459,
+ 1806903, 1806459, 1806903, 1806903, 1806459, 1806914, 1806903, 1806459, 1806459, 1806903, 1806459,
+ 1806914, 1806459, 1806914, 1806459, 1806903, 1806914, 1806459, 1806903, 1806459, 1806903, 1806914,
+ 1806903, 1806903, 1806459, 1806914, 1806914, 1806914, 1806914, 1806903, 1806459, 1806459, 1806903,
+ 1806903, 1806903, 1806459, 1806459, 1806459, 1806903, 1806903, 1806903, 1806459, 1806459, 1806903,
+ 1806459, 1806459, 1806903, 1806903, 1806459, 1806903, 1806903, 1806459, 1806459, 1495752, 1806903,
+ 1806903, 1806459, 1806903, 1806459, 1311387, 177451, 1311387, 1311387, 177451, 1311387, 1311387,
+ 1311387, 1311387, 177451, 177451, 177451, 177451, 1311387, 1311387, 177451, 1311387, 177451, 177451,
+ 177451, 1311387, 1311387, 177451, 177451, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387,
+ 1311387, 1311387, 1311387, 1806458, 1311387, 1806458, 1311387, 1311387, 177451, 1806458, 177451,
+ 1311387, 177451, 177451, 177451, 177451, 1806458, 1311387, 1806458, 1806458, 177451, 177451, 177451,
+ 1806458, 177451, 1311387, 177451, 177451, 177451, 1311387, 1311387, 177451, 177451, 177451, 1806458,
+ 177451, 177451, 1806458, 1806458, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 177451, 1311387,
+ 1311387, 177451, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387,
+ 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387,
+ 1311387, 1311387, 1806499, 1806499, 1311387, 1311387, 1311387, 1311387, 1311387, 1806499, 177451,
+ 1806499, 1311387, 177451, 1806499, 177451, 1806499, 177451, 1311387, 177451, 1311387, 1311387, 1311387,
+ 1806499, 1311387, 1311387, 1806499, 1311387, 1311387, 1311387, 1311387, 1311387, 1806499, 1311387,
+ 1806502, 1806502, 1806502, 1311387, 1806462, 1311387, 1806462, 1806502, 1806462, 1311387, 1311387,
+ 1311387, 1806462, 1806502, 1806502, 1311387, 1806462, 1806462, 1806462, 1311387, 1311387, 1311387,
+ 1806462, 1311387, 1806462, 1806462, 1806462, 1311387, 1806462, 1311387, 1806462, 1806462, 1806462,
+ 1806462, 1806462, 1806462, 1806462, 1807087, 1806451, 1806462, 1806462, 1311387, 1806462, 1311387,
+ 1806462, 1806462, 1806462, 1806462, 1806462, 1806462, 1806462, 1311387, 1311387, 1311387, 1311387,
+ 1806459, 1806459, 1311387, 1806459, 1311387, 1311387, 1311387, 1311387, 1806459, 1806459, 1806459,
+ 1806459, 1806459, 1311387, 1311387, 1311387, 1311387, 1311387, 1311387, 1806462, 1807087, 1807087,
+ 1806462, 898640, 1806462, 1806499, 898640, 1806499, 1806458, 1806499, 1806458, 1806499, 1806462,
+ 1806499, 1806499, 898640, 1806462, 1806462, 1807087, 1806499, 1806458, 898640, 1806499, 1807087, 898640,
+ 898640, 1806458, 1806499, 898640, 1806462, 898640, 1806462, 898640, 1806458, 898640, 1807087, 898640,
+ 898640, 898640, 1806462, 1807087, 1806499, 1806499, 898640, 1806499, 1806462, 898640, 1806499, 1806499,
+ 898640, 1807087, 898640, 1806462, 1806462, 1807087, 898640, 1806462, 1806499, 898640, 1807087, 1806499,
+ 1806462, 1806458, 1806499, 1806499, 1806499, 1806462, 898640, 1807087, 898640, 1806462, 1806462,
+ 1806499, 1806458, 1806499, 1806499, 1807087, 898640, 898640, 1806458, 1806499, 1807087, 1806499, 898640,
+ 1806499, 1806458, 1806499, 898640, 1807087, 1806458, 1807087, 1806499, 898640, 1806418, 898640, 1806462,
+ 1806499, 1806462, 898640, 1806499, 898640, 898640, 1806458, 898640, 1806499, 1807087, 1806462, 1806499,
+ 1806462, 898640, 898640, 1807087, 1806499, 898640, 1806499, 898640, 898640, 1311387, 1806458, 1806499,
+ 1806462, 1806499, 1806458, 1806462, 1806499, 898640, 1806458, 1806499, 1806462, 1806499, 1806499,
+ 898640, 1806462, 1806499, 898640, 1806499, 1806462, 1807087, 1806462, 1807087, 1807087, 1806462,
+ 1806462, 1807087, 1806499, 1807087, 1807087, 1806458, 1806462, 1806499, 1807087, 1806458, 1806499,
+ 1806499, 1806462, 1807087, 1806462, 1807087, 1806458, 1806462, 1806462, 898640, 1806462, 1806458,
+ 1807087, 898640, 898640, 898640, 1807087, 1806462, 1806458, 1806499, 1806458, 898640, 1806458, 1806499,
+ 1806458, 1806462, 1807087, 1806462, 898640, 1807087, 1806499, 1807087, 1806458, 1806462, 898640,
+ 1807087, 898640, 1806499, 1807087, 1806462, 1806499, 1806462, 1806499, 1806499, 898640, 1806499, 898640,
+ 1806462, 1807087, 1806462, 1807087, 1806462, 1806499, 1807087, 1806462, 1806458, 1806462, 1806462,
+ 1806462, 1806462, 1806462, 1807087, 1806462, 1806458, 1807087, 1807087, 1806462, 1806462, 1806458,
+ 1806462, 1806458, 1807087, 1806462, 1807087, 1807087, 1807087, 1806462, 1807087, 1807087, 1807087,
+ 1807087, 1806499, 1806462, 1807087, 1806499, 1807087, 1807087, 1807087, 1806462, 1806458, 1806462,
+ 1806462, 1806458, 1806462, 1806462, 1806458, 1806462, 1807087, 1807087, 1807087, 1806499, 1806499,
+ 1806499, 1806462, 1806458, 1807087, 1806458, 1806462, 1807087, 1806499, 1806462, 1806462, 1806462,
+ 1806499, 898640, 1806458, 1806499, 898640, 1806462, 1806458, 1806462, 1806499, 1806458, 1806458, 898640,
+ 1806458, 1806458, 898640, 1806499, 1806499, 1806458, 1806462, 1806462, 898640, 1806462, 1806458, 898640,
+ 1806499, 1806458, 898640, 1806458, 1806499, 1806458, 1806458, 1806458, 898640, 1806458, 898640, 898640,
+ 898640, 1806458, 1806458, 1806458, 1806499, 1806458, 898640, 1806458, 1806458, 1806499, 1806458,
+ 1806499, 1806458, 1806458, 898640, 1806458, 1806458, 1806499, 1806458, 1806458, 898640, 898640, 1806499,
+ 1806458, 1806458, 1806499, 1806458, 898640, 898640, 1806458, 1806458, 1806458, 1806499, 1806458,
+ 1806458, 1806499, 1806458, 1806499, 1806458, 1806499, 1806458, 1806458, 1806499, 1806499, 898640,
+ 1806462, 1806458, 898640, 1806499, 898640, 898640, 898640, 1806499, 1806499, 898640, 1806462, 898640,
+ 1806499, 898640, 1806462, 1806458, 1806499, 1806462, 1806499, 898640, 1806499, 898640, 1806458, 1806499,
+ 1806499, 1806499, 898640, 1806458, 1807087, 1806462, 1807087, 1806458, 1806462, 1806458, 1807087,
+ 1806458, 1806458, 1806462, 1806458, 898640, 1806458, 898640, 898640, 1807087, 1807087, 1806458, 1807087,
+ 898640, 1806462, 1806458, 898640, 898640, 1806458, 1806458, 1806458, 1806499, 898640, 1806499, 1807087,
+ 1806462, 1806458, 1806499, 898640, 1806458, 1806499, 1806459, 1806499, 1806499, 1806458, 1806499,
+ 1807087, 1806462, 1806499, 1806499, 1806462, 1806499, 1806499, 1713318, 1806458, 898640, 1807087,
+ 898640, 1806462, 898640, 1806499, 1806458, 1806458, 1806458, 898640, 898640, 898640, 1806458, 898640,
+ 1806458, 898640, 898640, 898640, 1806458, 1806499, 1806458, 898640, 1806462, 898640, 898640, 1806458,
+ 1806458, 1806499, 898640, 1807087, 1806458, 1806499, 1807087, 1806499, 1806458, 1806458, 1806458,
+ 1806458, 898640, 898640, 898640, 1806462, 1807087, 1806499, 1807087, 1806499, 898640, 898640, 1806458,
+ 898640, 1806499, 1806458, 1806462, 1806458, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452,
+ 1806452, 1311387, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452,
+ 177451, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452, 1806452,
+ 1806457, 1806457, 1806457, 1806457, 1806457, 1806457, 1807087, 1807087, 1807087, 1806451, 1807087,
+ 1807087, 1806451, 1807087, 1807087, 1807087, 1807087, 1806451, 1807087, 1807087, 1806451, 1806451,
+ 1807087, 1806451, 1806451, 1806451, 1807087, 1807087, 1807087, 1806451, 1807087, 1806451, 1807087,
+ 1807087, 1806451, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087,
+ 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 177451,
+ 1807087, 1807087, 177451, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087, 1807087,
+ 1807087, 1807087, 1806451, 1806502, 1806502, 1806502, 1806502, 1806451, 1806502, 1806451, 1806451,
+ 1806451, 1806502, 1806451, 1806502, 1806451, 1806502, 1806451, 1806502, 1806451, 1806451, 1806502,
+ 1806502, 1806451, 1806502, 1806502, 1806502, 1806451, 1806451, 1806451, 1806502, 1806502, 1806502,
+ 1806451, 1806451, 1806502, 1806502, 1806451, 1806452, 1806451, 1806451, 1806451, 1806451, 1806452,
+ 1806451, 1806452, 1806502, 1806451, 1806502, 1806451, 1806451, 1806452, 1806502, 1806502, 1806502,
+ 1806451, 1806452, 1806451, 1806502, 1806502, 1806502, 1806502, 1806451, 1806502, 1806502, 1806451,
+ 1806451, 1806451, 1806502, 1806502, 1806451, 1806451, 1806502, 1806451, 1806451, 177451, 1806502,
+ 1806452, 1806502, 1806452, 1806451, 1806502, 1806452, 1806451, 1806451, 1806451, 1806502, 1806502,
+ 1806451, 1806451, 1806502, 177451, 1806502, 1806452, 1806451, 1806451, 1806451, 1806502, 1806451,
+ 1806452, 1806451, 1806451, 1806451, 1806451, 1806451, 1806452, 1806502, 1806451, 177451, 1806452,
+ 1806502, 177451, 1806451, 1806502, 177451, 1806452, 177451, 1806451, 177451, 1806451, 1806452, 177451,
+ 1806451, 1806451, 1806502, 177451, 1806451, 1806502, 1806502, 1806451, 1806502, 1806502, 1806502,
+ 177451, 1806451, 177451, 177451, 1806452, 1806451, 1806502, 1806451, 1806502, 1806452, 1806451, 1806502,
+ 1806451, 1806502, 1806451, 1806452, 1806502, 1806451, 1806451, 1806502, 1806502, 177451, 1806451,
+ 1806452, 1806452, 1806499, 1806502, 1806451, 177451, 1806502, 1806502, 1806452, 1806451, 1806457,
+ 1806452, 1806502, 1806451, 1806502, 1806451, 1806452, 177451, 1806502, 1806502, 177451, 177451, 1806452,
+ 1806451, 1806502, 1806502, 1806452, 177451, 1806502, 1806451, 1806451, 1806502, 1806451, 1806502,
+ 1806451, 1806502, 1806451, 1806502, 1806452, 177451, 1806451, 1806451, 177451, 1806452, 1806502,
+ 1806452, 1806451, 1806502, 177451, 1806451, 1806451, 1806451, 1806502, 1806502, 1806452, 1806452,
+ 177451, 177451, 1806502, 1806502, 177451, 177451, 1806502, 177451, 1806452, 1806452, 177451, 1806452,
+ 177451, 1806502, 177451, 1806452, 1806452, 177451, 177451, 1806502, 1806452, 1806452, 1806452, 177451,
+ 1806451, 1806452, 1806452, 177451, 1806451, 1806452, 1806452, 177451, 1806452, 1806502, 177451, 1806451,
+ 1806452, 177451, 177451, 177451, 177451, 1806452, 1806502, 1806451, 1806452, 1806502, 1806502, 1806452,
+ 1806502, 1806452, 1806452, 177451, 1806451, 1806502, 1806452, 1806502, 1806452, 1806452, 1806502,
+ 177451, 1806452, 177451, 1806452, 1806452, 1806451, 1806451, 177451, 1806452, 1806502, 177451, 1806452,
+ 177451, 1806502, 177451, 1806502, 177451, 1806451, 177451, 177451, 1806452, 1806502, 1806502, 1806502,
+ 1806502, 1806451, 1806452, 1806502, 1806452, 1806452, 1806452, 1806502, 1806451, 1806502, 177451,
+ 1806452, 1806502, 1806451, 1806452, 1806452, 1806452, 1806451, 177451, 1806452, 1806452, 177451,
+ 1806451, 177451, 1806452, 177451, 1806502, 1806451, 177451, 1806451, 177451, 177451, 1806452, 177451,
+ 1806502, 1806452, 177451, 1806452, 177451, 1806502, 177451, 1806502, 177451, 177451, 1806452, 177451,
+ 1806451, 1806452, 1806452, 177451, 1806451, 1806458, 1806451, 1806452, 177451, 1806452, 177451, 1806502,
+ 177451, 1806452, 177451, 177451, 1806452, 1806502, 1806452, 1806451, 1806452, 1806451, 177451, 1806452,
+ 1806502, 177451, 1806502, 177451, 177451, 1806452, 177451, 1806502, 177451, 1806451, 1806452, 1806452,
+ 1806452, 1806452, 1806451, 1806502, 177451, 177451, 1806452, 1806502, 1806451, 177451, 177451, 177451,
+ 1806502, 1806452, 1806452, 1806452, 1806452, 2848361, 1806465, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806452, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1482583, 1806465,
+ 1806465, 177462, 1806465, 1806465, 1806465, 1806465, 177462, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1806465, 1806465, 1806502, 177462, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465, 1806465,
+ 1806465, 1806465, 1806465, 1482583, 1806465, 1806465, 1806465, 1806465, 1806465, 1806454, 1806454,
+ 177462, 177462, 1806454, 1806454, 1806454, 898640, 1806454, 898640, 1806454, 1806454, 898640, 1806454,
+ 1806454, 1806454, 1806454, 177462, 177462, 898640, 177462, 1806454, 177462, 1806454, 1806454, 898640,
+ 177462, 177462, 898640, 177462, 1806454, 1806454, 1806454, 177462, 898640, 1806454, 177462, 177462,
+ 898640, 1806454, 898640, 1806454, 1806454, 177462, 1806454, 898640, 177462, 177462, 898640, 898640,
+ 177462, 177462, 177462, 177462, 177462, 177462, 177462, 177462, 177462, 177462, 1806454, 1806454,
+ 898640, 1806454, 177462, 1806454, 1806454, 1806454, 1806454, 1806454, 1806454, 1806454, 177462, 177462,
+ 1806454, 1806454, 177462, 1806454, 1806454, 177462, 177462, 1806454, 1806454, 1806454, 1806454, 177462,
+ 1806454, 1806454, 1806454, 1806454, 1806454, 177462, 177462, 1806454, 1806454, 1806454, 1806454,
+ 1806454, 1806454, 1806454, 177462, 177462, 1806454, 1806454, 1806454, 1806454, 1806465, 177462, 1806454,
+ 177462, 177462, 1806454, 1806454, 177462, 1806454, 1806454, 177462, 177462, 177462, 177462, 177462,
+ 898640, 177462, 177462, 177462, 1806462, 1482583, 1806454, 1806454, 1806454, 1806454, 898640, 1806454,
+ 1806454, 1806454, 1806454, 1806454, 1806454, 177462, 177462, 177462, 1806454, 177462, 177462, 1806454,
+ 177462, 1806454, 177462, 1806454, 177462, 177462, 177462, 177462, 1806454, 177462, 177462, 1806454,
+ 177462, 177462, 177462, 177462, 177462, 177462, 1806454, 1806454, 1806454, 1806454, 1311387, 1806454,
+ 177462, 177462, 1311387, 1806454, 1806454, 177462, 1806454, 1806454, 1806454, 1311387, 1806454, 1806454,
+ 1311387, 177462, 177462, 177462, 1311387, 1806454, 1806454, 1311387, 1806454, 1311387, 177462, 1806454,
+ 1311387, 1311387, 1806454, 1311387, 177462, 1806454, 1806454, 1806454, 177462, 1806454, 1806454, 177462,
+ 177462, 177462, 1806454, 177462, 177462, 177462, 177462, 177462, 177462, 177462, 177462, 1806454,
+ 1806454, 1806454, 1806454, 177462, 177462, 177462, 177462, 177462, 177462, 177462, 177462, 177462,
+ 1806454, 177462, 177462, 1806454, 1806454, 177462, 177462, 1806454, 177462, 1806454, 177462, 177462,
+ 1806454, 177462, 177462, 177462, 177462, 1806454, 1806454, 177462, 177462, 177462, 1806454, 1806454,
+ 177462, 177462, 177462, 177462, 177462, 1806454, 177462, 1806454, 177462, 177462};
+
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishRequirements.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishRequirements.java new file mode 100644 index 00000000000..21c3cd1c94a --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishRequirements.java @@ -0,0 +1,207 @@ +/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.blam.operation;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.define.DefinePlugin;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.db.connection.exception.OseeStateException;
+import org.eclipse.osee.framework.jdk.core.util.time.GlobalTime;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactCache;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactLoad;
+import org.eclipse.osee.framework.skynet.core.artifact.ArtifactLoader;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.BranchManager;
+import org.eclipse.osee.framework.skynet.core.artifact.WordArtifact;
+import org.eclipse.osee.framework.skynet.core.attribute.Attribute;
+import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.skynet.core.relation.RelationManager;
+import org.eclipse.osee.framework.skynet.core.transaction.SkynetTransaction;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam;
+import org.eclipse.osee.framework.ui.skynet.render.ITemplateRenderer;
+import org.eclipse.osee.framework.ui.skynet.render.RendererManager;
+import org.eclipse.osee.framework.ui.skynet.render.WordTemplateRenderer;
+import org.eclipse.osee.framework.ui.skynet.util.OSEELog;
+
+/**
+ * @author Jeff C. Phillips
+ * @author Theron Virgin
+ */
+public class PublishRequirements extends AbstractBlam {
+ private boolean includeAttributes;
+ private boolean publishAsDiff;
+ private boolean removeTrackedChanges;
+ private Date date;
+ private Branch branch;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.osee.framework.skynet.core.artifact.Branch, org.eclipse.core.runtime.IProgressMonitor)
+ */
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ Boolean updateParagraphNumber = variableMap.getBoolean("Update Paragraph Numbers");
+ List<Artifact> artifacts = variableMap.getArtifacts("artifacts");
+ includeAttributes = variableMap.getBoolean("Publish With Attributes");
+ publishAsDiff = variableMap.getBoolean("Publish As Diff");
+ removeTrackedChanges = variableMap.getBoolean("Skip Artifacts with Tracked Changes");
+ if (variableMap.getValue("Diff Starting Point") instanceof Date) {
+ date = (Date) variableMap.getValue("Diff Starting Point");
+ }
+ branch = variableMap.getBranch("Diff Branch");
+
+ RelationManager.getRelatedArtifacts(artifacts, 999, true, CoreRelationEnumeration.DEFAULT_HIERARCHICAL__CHILD);
+
+ SkynetTransaction transaction = new SkynetTransaction(artifacts.get(0).getBranch());
+ String templateOption =
+ publishAsDiff ? (includeAttributes ? ITemplateRenderer.DIFF_VALUE : ITemplateRenderer.DIFF_NO_ATTRIBUTES_VALUE) : (includeAttributes ? ITemplateRenderer.PREVIEW_WITH_RECURSE_VALUE : ITemplateRenderer.PREVIEW_WITH_RECURSE_NO_ATTRIBUTES_VALUE);
+ VariableMap options =
+ new VariableMap(WordTemplateRenderer.UPDATE_PARAGRAPH_NUMBER_OPTION, updateParagraphNumber,
+ ITemplateRenderer.TEMPLATE_OPTION, templateOption, ITemplateRenderer.TRANSACTION_OPTION, transaction);
+ for (Artifact artifact : artifacts) {
+ try {
+ publish(monitor, artifact, options);
+ } catch (OseeStateException ex) {
+ OseeLog.log(DefinePlugin.class, Level.SEVERE, ex);
+ }
+ }
+ transaction.execute();
+ }
+
+ private void publish(IProgressMonitor monitor, Artifact artifact, VariableMap options) throws OseeCoreException {
+ if (monitor.isCanceled()) {
+ return;
+ }
+
+ ArrayList<Artifact> nonFolderChildren = new ArrayList<Artifact>();
+ if (artifact.isOfType("Folder")) {
+ for (Artifact child : artifact.getChildren(true)) {
+ if (child.isOfType("Folder")) {
+ publish(monitor, child, options);
+ } else {
+ nonFolderChildren.add(child);
+ }
+ }
+ } else {
+ nonFolderChildren.add(artifact);
+ }
+
+ if (publishAsDiff) {
+ if (branch == null || date == null) {
+ throw new OseeCoreException(
+ "Must Select a " + branch == null ? "Branch" : "Date" + " to diff against when publishing as Diff");
+ }
+ nonFolderChildren = buildRecursiveList(nonFolderChildren);
+ int transactionId = BranchManager.getBranchTransaction(date, branch.getBranchId());
+ ArrayList<Artifact> olderArtifacts = getOlderArtifacts(nonFolderChildren, transactionId, branch.getBranchId());
+ int index = 0;
+ for (Artifact art : olderArtifacts) {
+ if (art != null && art.isDeleted()) {
+ olderArtifacts.set(index, null);
+ }
+ if (art != null && removeTrackedChanges && containsTrackedChanges(art)) {
+ appendResultLine(String.format("Skiped %s because it Contains Tracked Changes\n",
+ art.getDescriptiveName()));
+ olderArtifacts.set(index, null);
+ }
+ index++;
+ }
+ index = 0;
+ for (Artifact art : nonFolderChildren) {
+ if (art != null && art.isDeleted()) {
+ nonFolderChildren.set(index, null);
+ }
+ if (art != null && removeTrackedChanges && containsTrackedChanges(art)) {
+ appendResultLine(String.format("Skiped %s because it contains Tracked Changes\n",
+ art.getDescriptiveName()));
+ nonFolderChildren.set(index, null);
+ }
+ index++;
+ }
+ RendererManager.diffInJob(olderArtifacts, nonFolderChildren, options);
+ } else {
+ RendererManager.preview(nonFolderChildren, monitor, options);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getDescriptionUsage()
+ */
+ public String getDescriptionUsage() {
+ return "Drag in parent artifacts below and click the play button at the top right.";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XCheckBox\" horizontalLabel=\"true\" labelAfter=\"true\" displayName=\"Update Paragraph Numbers\" /><XWidget xwidgetType=\"XCheckBox\" horizontalLabel=\"true\" labelAfter=\"true\" displayName=\"Publish With Attributes\" /><XWidget xwidgetType=\"XCheckBox\" horizontalLabel=\"true\" labelAfter=\"true\" displayName=\"Publish As Diff\" /><XWidget xwidgetType=\"XLabel\" displayName=\" \" /><XWidget xwidgetType=\"XLabel\" displayName=\"Diff Options:\" /><XWidget xwidgetType=\"XCheckBox\" horizontalLabel=\"true\" labelAfter=\"true\" displayName=\"Skip Artifacts with Tracked Changes\" /><XWidget xwidgetType=\"XDate\" displayName=\"Diff Starting Point\" /><XWidget xwidgetType=\"XBranchSelectWidget\" displayName=\"Diff Branch\" defaultValue=\"" + BranchManager.getDefaultBranch().getBranchName() + "\" /><XWidget xwidgetType=\"XListDropViewer\" displayName=\"artifacts\" /></xWidgets>";
+ }
+
+ private ArrayList<Artifact> getOlderArtifacts(ArrayList<Artifact> artifacts, int transactionId, int branchId) throws OseeCoreException {
+ ArrayList<Artifact> historicArtifacts = new ArrayList<Artifact>(artifacts.size());
+ int queryId = ArtifactLoader.getNewQueryId();
+ Timestamp insertTime = GlobalTime.GreenwichMeanTimestamp();
+
+ Set<Artifact> artifactSet = new HashSet<Artifact>(artifacts);
+ List<Object[]> insertParameters = new LinkedList<Object[]>();
+ for (Artifact artifact : artifactSet) {
+ insertParameters.add(new Object[] {queryId, insertTime, artifact.getArtId(), branchId, transactionId});
+ }
+ ArtifactLoader.loadArtifacts(queryId, ArtifactLoad.FULL, null, insertParameters, false, true, true);
+ for (Artifact artifact : artifacts) {
+ historicArtifacts.add(ArtifactCache.getHistorical(artifact.getArtId(), transactionId));
+ }
+ return historicArtifacts;
+ }
+
+ private ArrayList<Artifact> buildRecursiveList(ArrayList<Artifact> artifacts) throws OseeCoreException {
+ ArrayList<Artifact> artifactWithChildren = new ArrayList<Artifact>(artifacts.size());
+ for (Artifact artifact : artifacts) {
+ artifactWithChildren.add(artifact);
+ addChildren(artifactWithChildren, artifact);
+ }
+ return artifactWithChildren;
+ }
+
+ private void addChildren(ArrayList<Artifact> artifacts, Artifact artifact) throws OseeCoreException {
+ for (Artifact loopArtifact : artifact.getChildren(true)) {
+ artifacts.add(loopArtifact);
+ addChildren(artifacts, loopArtifact);
+ }
+ }
+
+ private boolean containsTrackedChanges(Artifact art) {
+ if (art.isOfType(WordArtifact.ARTIFACT_NAME)) {
+ boolean isWholeWord = art.isOfType(WordArtifact.WHOLE_WORD);
+ try {
+ Attribute<?> attribute =
+ art.getSoleAttribute(isWholeWord ? WordAttribute.WHOLE_WORD_CONTENT : WordAttribute.WORD_TEMPLATE_CONTENT);
+ if (attribute != null) {
+ return ((WordAttribute) attribute).mergeMarkupPresent();
+ }
+ } catch (OseeCoreException ex) {
+ OSEELog.logException(PublishRequirements.class, ex, false);
+ }
+ }
+ return false;
+ }
+}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishSrs.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishSrs.java new file mode 100644 index 00000000000..73680e37bcb --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishSrs.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.blam.operation; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.osee.framework.ui.skynet.blam.VariableMap; +import org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam; +import org.eclipse.osee.framework.ui.skynet.render.WordTemplateRenderer; + +/** + * We need to create an SRSRenderer that provides the correct templates. Then we'll use it instead of the WordTemplate + * processor like we do currently. + * + * @author Robert A. Fisher + */ + +public class PublishSrs extends AbstractBlam { + + public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception { + Boolean updateParagraphNumber = variableMap.getBoolean("Update Paragraph Numbers"); + WordTemplateRenderer srsRenderer = new WordTemplateRenderer(WordTemplateRenderer.RENDERER_EXTENSION); + srsRenderer.setOptions(new VariableMap(WordTemplateRenderer.UPDATE_PARAGRAPH_NUMBER_OPTION, updateParagraphNumber)); + srsRenderer.publishSRS(variableMap); + } + + /* + * (non-Javadoc) + * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml() + */ + public String getXWidgetsXml() { + return "<xWidgets><XWidget xwidgetType=\"XCheckBox\" horizontalLabel=\"true\" labelAfter=\"true\" displayName=\"Update Paragraph Numbers\" /><XWidget xwidgetType=\"XBranchSelectWidget\" displayName=\"Branch\" /></xWidgets>"; + } +}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishSubsystemToDesignTraceability.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishSubsystemToDesignTraceability.java new file mode 100644 index 00000000000..bb827f10154 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/blam/operation/PublishSubsystemToDesignTraceability.java @@ -0,0 +1,126 @@ +/*******************************************************************************
+ * Copyright (c) 2004, 2008 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.define.blam.operation;
+
+import java.io.IOException;
+import java.util.List;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.io.CharBackedInputStream;
+import org.eclipse.osee.framework.jdk.core.util.io.xml.ExcelXmlWriter;
+import org.eclipse.osee.framework.jdk.core.util.io.xml.ISheetWriter;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration;
+import org.eclipse.osee.framework.ui.plugin.util.AIFile;
+import org.eclipse.osee.framework.ui.plugin.util.OseeData;
+import org.eclipse.osee.framework.ui.skynet.blam.VariableMap;
+import org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam;
+import org.eclipse.swt.program.Program;
+
+/**
+ * @author Ryan D. Brooks
+ */
+public class PublishSubsystemToDesignTraceability extends AbstractBlam {
+ private CharBackedInputStream charBak;
+ private ISheetWriter excelWriter;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#runOperation(org.eclipse.osee.framework.ui.skynet.blam.VariableMap, org.eclipse.core.runtime.IProgressMonitor)
+ */
+
+ private void init() throws IOException {
+ charBak = new CharBackedInputStream();
+ excelWriter = new ExcelXmlWriter(charBak.getWriter());
+ }
+
+ public void runOperation(VariableMap variableMap, IProgressMonitor monitor) throws Exception {
+ monitor.beginTask(getDescriptionUsage(), 100);
+
+ List<Artifact> subsystems = variableMap.getArtifacts("Subsystem Root Artifacts");
+ Branch branch = subsystems.get(0).getBranch();
+
+ init();
+
+ monitor.subTask("Aquiring Design Artifacts"); // bulk load for performance reasons
+ ArtifactQuery.getArtifactsFromType("Subsystem Design", branch);
+ monitor.worked(10);
+
+ monitor.subTask("Aquiring Subsystem Requirements"); // bulk load for performance reasons
+ ArtifactQuery.getArtifactsFromType("Subsystem Requirement", branch);
+ monitor.worked(60);
+
+ int workIncrement = 30 / subsystems.size();
+ for (Artifact subsystem : subsystems) {
+ if (monitor.isCanceled()) {
+ return;
+ }
+ monitor.worked(workIncrement);
+ writeSubsystemDesignTraceability(subsystem);
+ }
+
+ excelWriter.endWorkbook();
+ IFile iFile = OseeData.getIFile("SubsystemToDesignTrace_" + Lib.getDateTimeString() + ".xml");
+ AIFile.writeToFile(iFile, charBak);
+ Program.launch(iFile.getLocation().toOSString());
+ }
+
+ private void writeSubsystemDesignTraceability(Artifact subsystem) throws IOException, OseeCoreException {
+ excelWriter.startSheet(subsystem.getDescriptiveName(), 200);
+ excelWriter.writeRow(subsystem.getDescriptiveName() + " Subsystem To Design Traceability");
+
+ excelWriter.writeRow("Subsystem Requirement", null, "Subsystem Design");
+ excelWriter.writeRow("Paragraph Number", "Paragraph Title", "Paragraph Number", "Paragraph Title");
+
+ for (Artifact subsystemRequirement : subsystem.getDescendants()) {
+ excelWriter.writeCell(subsystemRequirement.getSoleAttributeValue("Imported Paragraph Number", ""));
+ excelWriter.writeCell(subsystemRequirement.getDescriptiveName());
+
+ if (subsystemRequirement.isOfType("Subsystem Requirement")) {
+ boolean loopNeverRan = true;
+ for (Artifact subsystemDesign : subsystemRequirement.getRelatedArtifacts(CoreRelationEnumeration.Design__Design)) {
+ if (subsystemDesign.isOfType("Subsystem Design")) {
+ loopNeverRan = false;
+ excelWriter.writeCell(subsystemDesign.getSoleAttributeValue("Imported Paragraph Number", ""), 2);
+ excelWriter.writeCell(subsystemDesign.getDescriptiveName(), 3);
+ excelWriter.endRow();
+ }
+ }
+ if (loopNeverRan) {
+ excelWriter.endRow();
+ }
+ } else {
+ excelWriter.writeCell("N/A - " + subsystemRequirement.getArtifactTypeName());
+ excelWriter.endRow();
+ }
+ }
+
+ excelWriter.endSheet();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.AbstractBlam#getDescriptionUsage()
+ */
+ @Override
+ public String getDescriptionUsage() {
+ return "Publish Subsystem To Design Traceability Tables";
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation#getXWidgetXml()
+ */
+ public String getXWidgetsXml() {
+ return "<xWidgets><XWidget xwidgetType=\"XListDropViewer\" displayName=\"Subsystem Root Artifacts\" /></xWidgets>";
+ }
+}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/ErrorHandler.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/ErrorHandler.java new file mode 100644 index 00000000000..e12cb033134 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/ErrorHandler.java @@ -0,0 +1,49 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.errorhandler; + +import java.util.HashSet; +import java.util.Set; + +public class ErrorHandler { + + private Set<Resolver> set; + private StateValue value; + + /** + * Error handler. + */ + public ErrorHandler() { + super(); + this.set = new HashSet<Resolver>(); + this.value = new StateValue(); + } + + public void processException(Exception ex) { + boolean resolved = false; + for (Resolver r : set) { + if (r.resolve(ex, value)) { + resolved = true; + } + } + if (!resolved) { + throw new RuntimeException("Exception not resolved", ex); + } + } + + public void addResolver(Resolver resolver) { + set.add(resolver); + } + + public boolean isSaveValid() { + return value.isSaveValid(); + } +} diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/Resolver.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/Resolver.java new file mode 100644 index 00000000000..aacf4e76012 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/Resolver.java @@ -0,0 +1,17 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.errorhandler; + +public interface Resolver { + + public boolean resolve(Exception ex, StateValue value); + +} diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/SqlResolver.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/SqlResolver.java new file mode 100644 index 00000000000..eae68646af2 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/SqlResolver.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.errorhandler; + +public class SqlResolver implements Resolver { + + public SqlResolver() { + super(); + } + + public boolean resolve(Exception ex, StateValue value) { + if (ex.getMessage().contains("connection")) { + value.andSaveValid(false); + return true; + } + return false; + } + + @Override + public boolean equals(Object obj) { + return this.getClass().getCanonicalName().equals(obj.getClass().getCanonicalName()); + } + + @Override + public int hashCode() { + return this.getClass().getCanonicalName().hashCode(); + } + +} diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/StateValue.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/StateValue.java new file mode 100644 index 00000000000..8cb4546cb80 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/errorhandler/StateValue.java @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.errorhandler; + +public class StateValue { + + private boolean isSaveValid; + + public StateValue() { + super(); + isSaveValid = true; + } + + public boolean isSaveValid() { + return isSaveValid; + } + + public void andSaveValid(boolean isSaveValid) { + this.isSaveValid &= isSaveValid; + } + +} diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/health/BranchCommitRegressionTest.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/health/BranchCommitRegressionTest.java new file mode 100644 index 00000000000..5469a3bd858 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/health/BranchCommitRegressionTest.java @@ -0,0 +1,91 @@ +/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.define.health;
+
+import java.util.logging.Level;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.osee.define.DefinePlugin;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.plugin.util.Jobs;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItem;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItemAction;
+import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateComposite.TableLoadOption;
+import org.eclipse.osee.framework.ui.skynet.widgets.xresults.XResultData;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class BranchCommitRegressionTest extends XNavigateItemAction {
+
+ public static String NAME = "CommitRegressionTest - Run on Test";
+
+ /**
+ * @param parent
+ */
+ public BranchCommitRegressionTest(XNavigateItem parent) {
+ super(parent, NAME);
+ }
+
+ public BranchCommitRegressionTest() {
+ this(null);
+ }
+
+ @Override
+ public void run(TableLoadOption... tableLoadOptions) {
+ if (!MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), getName(), getName())) return;
+ Jobs.startJob(new TraxInterfaceRegressionTestJob(getName()), true);
+ }
+
+ public class TraxInterfaceRegressionTestJob extends Job {
+ XResultData rd = new XResultData();
+ private final String jobName;
+
+ public TraxInterfaceRegressionTestJob(String jobName) {
+ super(jobName);
+ this.jobName = jobName;
+ }
+
+ @Override
+ public IStatus run(IProgressMonitor monitor) {
+ try {
+ runTest(rd, monitor);
+ rd.report(getName());
+ monitor.done();
+ return Status.OK_STATUS;
+ } catch (Exception ex) {
+ OseeLog.log(DefinePlugin.class, Level.SEVERE, ex);
+ return new Status(Status.ERROR, DefinePlugin.PLUGIN_ID, -1, ex.getMessage(), ex);
+ }
+ }
+
+ }
+
+ /**
+ * used recursively when originally passed a directory, thus an array of files is accepted
+ *
+ * @param monitor
+ * @throws Exception
+ */
+ public static void runTest(XResultData rd, IProgressMonitor monitor) throws Exception {
+ if (monitor != null) monitor.subTask(NAME);
+ rd.logError("This is an error");
+ rd.logWarning("This is a warning");
+ if (monitor != null) monitor.done();
+ rd.log("Complete");
+ }
+
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationJob.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationJob.java new file mode 100644 index 00000000000..5489d1d146c --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationJob.java @@ -0,0 +1,53 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.meta; + +import java.io.File; +import java.io.FileInputStream; +import java.util.logging.Level; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.osee.define.DefinePlugin; +import org.eclipse.osee.define.relation.Import.RelationImporter; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.artifact.Branch; + +/** + * @author Ryan D. Brooks + */ +public class ImportRelationJob extends Job { + private final File file; + private final Branch branch; + + public ImportRelationJob(File file, Branch branch) throws IllegalArgumentException, CoreException { + super("Importing Relations"); + this.file = file; + this.branch = branch; + } + + public IStatus run(IProgressMonitor monitor) { + try { + RelationImporter importer = new RelationImporter(branch); + importer.extractRelationsFromSheet(new FileInputStream(file), monitor); + return Status.OK_STATUS; + } catch (Exception ex) { + String message = ex.getMessage(); + + if (message == null) message = ""; + + OseeLog.log(DefinePlugin.class, Level.SEVERE, ex); + return new Status(Status.ERROR, DefinePlugin.PLUGIN_ID, -1, ex.toString(), ex); + } + } +}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationPage.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationPage.java new file mode 100644 index 00000000000..d0206aa4be9 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationPage.java @@ -0,0 +1,189 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.meta; + +import java.io.File; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.jface.dialogs.ErrorDialog; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.osee.framework.skynet.core.artifact.BranchManager; +import org.eclipse.osee.framework.ui.plugin.util.AWorkspace; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.FileDialog; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.dialogs.WizardDataTransferPage; + +/** + * @author Ryan D. Brooks + */ +public class ImportRelationPage extends WizardDataTransferPage { + private Button btnSingleFile; + private Text txtSingleFile; + private String currentFileSelection; + + /** + * @param name + * @param selection + */ + public ImportRelationPage(String name, IStructuredSelection selection) { + super(name); + setTitle("Import relations into Define"); + setDescription("Import relations into Define"); + + if (selection != null && selection.size() == 1) { + Object firstElement = selection.getFirstElement(); + if (firstElement instanceof IAdaptable) { + Object resource = ((IAdaptable) firstElement).getAdapter(IResource.class); + if (resource != null) { + IResource currentResourceSelection = (IResource) resource; + if (currentResourceSelection.getType() == IResource.FILE) { + currentFileSelection = currentResourceSelection.getLocation().toString(); + } + } + } + } + } + + /** + * (non-Javadoc) Method declared on IDialogPage. + */ + public void createControl(Composite parent) { + + initializeDialogUnits(parent); + + Composite composite = new Composite(parent, SWT.NULL); + composite.setLayout(new GridLayout()); + composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL)); + composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); + composite.setFont(parent.getFont()); + + createSourceGroup(composite); + + restoreWidgetValues(); + updateWidgetEnablements(); + setPageComplete(determinePageCompletion()); + + setControl(composite); + } + + /** + * The <code>WizardResourceImportPage</code> implementation of this <code>Listener</code> method handles all + * events and enablements for controls on this page. Subclasses may extend. + * + * @param event Event + */ + public void handleEvent(Event event) { + setPageComplete(determinePageCompletion()); + } + + protected void createSourceGroup(Composite parent) { + Group composite = new Group(parent, SWT.NONE); + composite.setText("Import Source"); + GridLayout gd = new GridLayout(); + gd.numColumns = 3; + composite.setLayout(gd); + composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + txtSingleFile = new Text(composite, SWT.SINGLE | SWT.BORDER); + txtSingleFile.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + txtSingleFile.setText((currentFileSelection == null ? "" : currentFileSelection)); + txtSingleFile.addListener(SWT.Modify, this); + btnSingleFile = new Button(composite, SWT.PUSH); + btnSingleFile.setText("&Browse..."); + + btnSingleFile.addSelectionListener(new SelectionAdapter() { + /* (non-Javadoc) + * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) + */ + @Override + public void widgetSelected(SelectionEvent e) { + File file = selectFile(); + if (file != null && file.isFile()) txtSingleFile.setText(file.getPath()); + } + }); + + setPageComplete(determinePageCompletion()); + } + + /* + * @see WizardPage#becomesVisible + */ + public void setVisible(boolean visible) { + super.setVisible(visible); + // policy: wizards are not allowed to come up with an error message + if (visible) { + setErrorMessage(null); + } + } + + protected boolean validateSourceGroup() { + if (!(new File(txtSingleFile.getText()).isFile())) { + setErrorMessage(txtSingleFile.getText() + " is not a file"); + return false; + } + return true; + } + + public boolean finish() { + try { + // getSpecifiedContainer().getProject(); + + File file = new File(txtSingleFile.getText()); + // TODO this branch needs to be selected from the wizard not hard coded + Job job = new ImportRelationJob(file, BranchManager.getDefaultBranch()); + job.setUser(true); + job.setPriority(Job.LONG); + job.schedule(); + } catch (Exception ex) { + ex.printStackTrace(); + ErrorDialog.openError(getShell(), "Define Import Error", "An error has occured while importing a document.", + new Status(IStatus.ERROR, "org.eclipse.osee.framework.jdk.core", IStatus.ERROR, + "Unknown exception occurred in the import", ex)); + } + return true; + } + + private File selectFile() { + FileDialog dialog = new FileDialog(getShell(), SWT.OPEN | SWT.SINGLE); + dialog.setFilterExtensions(new String[] {"*.xml"}); + dialog.setFilterPath(AWorkspace.getWorkspacePath()); + + String path = dialog.open(); + + if (path != null) { + return new File(path); + } else { + return null; + } + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.dialogs.WizardResourceImportPage#allowNewContainerName() + */ + @Override + protected boolean allowNewContainerName() { + return false; + } +}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationWizard.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationWizard.java new file mode 100644 index 00000000000..3de43c67a94 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/meta/ImportRelationWizard.java @@ -0,0 +1,62 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.meta; + +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.osee.define.DefinePlugin; +import org.eclipse.ui.IImportWizard; +import org.eclipse.ui.IWorkbench; + +/** + * @author Ryan D. Brooks + */ +public class ImportRelationWizard extends Wizard implements IImportWizard { + private ImportRelationPage mainPage; + private IStructuredSelection selection; + + /** + * + */ + public ImportRelationWizard() { + super(); + setDialogSettings(DefinePlugin.getInstance().getDialogSettings()); + setWindowTitle("Skynet Types Import Wizard"); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.wizard.Wizard#performFinish() + */ + @Override + public boolean performFinish() { + return mainPage.finish(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, + * org.eclipse.jface.viewers.IStructuredSelection) + */ + public void init(IWorkbench workbench, IStructuredSelection selection) { + this.selection = selection; + } + + /** + * (non-Javadoc) Method declared on Wizard. + */ + public void addPages() { + mainPage = new ImportRelationPage("Import Artifact Types", selection); + addPage(mainPage); + } +} diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateView.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateView.java new file mode 100644 index 00000000000..cbd19958acc --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateView.java @@ -0,0 +1,82 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.navigate; + +import org.eclipse.jface.action.Action; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.osee.define.DefinePlugin; +import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin; +import org.eclipse.osee.framework.ui.skynet.ats.IActionable; +import org.eclipse.osee.framework.ui.skynet.ats.OseeAts; +import org.eclipse.osee.framework.ui.skynet.util.DbConnectionExceptionComposite; +import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateComposite; +import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItem; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.part.ViewPart; + +/** + * Insert the type's description here. + * + * @see ViewPart + */ +public class DefineNavigateView extends ViewPart implements IActionable { + + public static final String VIEW_ID = "org.eclipse.osee.define.DefineNavigateView"; + public static final String HELP_CONTEXT_ID = "defineNavigator"; + private XNavigateComposite xNavComp; + + /** + * The constructor. + */ + public DefineNavigateView() { + } + + public void setFocus() { + } + + /* + * @see IWorkbenchPart#createPartControl(Composite) + */ + public void createPartControl(Composite parent) { + if (!DbConnectionExceptionComposite.dbConnectionIsOk(parent)) return; + + xNavComp = new XNavigateComposite(new DefineNavigateViewItems(), parent, SWT.NONE); + xNavComp.getFilteredTree().getViewer().setSorter(new DefineNavigateViewerSorter()); + + DefinePlugin.getInstance().setHelp(xNavComp, HELP_CONTEXT_ID); + createActions(); + xNavComp.refresh(); + } + + protected void createActions() { + + Action refreshAction = new Action("Refresh") { + + public void run() { + xNavComp.refresh(); + } + }; + refreshAction.setImageDescriptor(SkynetGuiPlugin.getInstance().getImageDescriptor("refresh.gif")); + refreshAction.setToolTipText("Refresh"); + + OseeAts.addBugToViewToolbar(this, this, DefinePlugin.getInstance(), VIEW_ID, "Define Navigator"); + + } + + public String getActionDescription() { + IStructuredSelection sel = (IStructuredSelection) xNavComp.getFilteredTree().getViewer().getSelection(); + if (sel.iterator().hasNext()) return String.format("Currently Selected - %s", + ((XNavigateItem) sel.iterator().next()).getName()); + return ""; + } + +}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateViewItems.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateViewItems.java new file mode 100644 index 00000000000..5f5dcf16003 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateViewItems.java @@ -0,0 +1,100 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.navigate; + +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Level; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtension; +import org.eclipse.core.runtime.IExtensionPoint; +import org.eclipse.core.runtime.Platform; +import org.eclipse.osee.define.DefinePlugin; +import org.eclipse.osee.define.health.BranchCommitRegressionTest; +import org.eclipse.osee.framework.db.connection.exception.OseeCoreException; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.access.AccessControlManager; +import org.eclipse.osee.framework.ui.skynet.SkynetGuiPlugin; +import org.eclipse.osee.framework.ui.skynet.blam.BlamOperations; +import org.eclipse.osee.framework.ui.skynet.blam.operation.BlamOperation; +import org.eclipse.osee.framework.ui.skynet.util.OSEELog; +import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItem; +import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItemBlam; +import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateViewItems; +import org.osgi.framework.Bundle; + +/** + * @author Donald G. Dunne + */ +public class DefineNavigateViewItems extends XNavigateViewItems { + private static DefineNavigateViewItems navigateItems = new DefineNavigateViewItems(); + + public DefineNavigateViewItems() { + super(); + } + + public static DefineNavigateViewItems getInstance() { + return navigateItems; + } + + public List<XNavigateItem> getSearchNavigateItems() { + List<XNavigateItem> items = new ArrayList<XNavigateItem>(); + + XNavigateItem blamOperationItems = new XNavigateItem(null, "Blam Operations"); + for (BlamOperation blamOperation : BlamOperations.getBlamOperationsNameSort()) { + new XNavigateItemBlam(blamOperationItems, blamOperation); + } + items.add(blamOperationItems); + + try { + if (AccessControlManager.isOseeAdmin()) { + XNavigateItem adminItems = new XNavigateItem(null, "Admin"); + new BranchCommitRegressionTest(adminItems); + items.add(adminItems); + } + } catch (OseeCoreException ex) { + OseeLog.log(SkynetGuiPlugin.class, Level.SEVERE, ex); + } + + addExtensionPointItems(items); + + return items; + } + + public void addExtensionPointItems(List<XNavigateItem> items) { + IExtensionPoint point = + Platform.getExtensionRegistry().getExtensionPoint("org.eclipse.osee.define.DefineNavigateItem"); + if (point == null) OSEELog.logSevere(DefinePlugin.class, "Can't access DefineNavigateItem extension point", true); + IExtension[] extensions = point.getExtensions(); + for (IExtension extension : extensions) { + IConfigurationElement[] elements = extension.getConfigurationElements(); + String classname = null; + String bundleName = null; + for (IConfigurationElement el : elements) { + if (el.getName().equals("IDefineNavigateItem")) { + classname = el.getAttribute("classname"); + bundleName = el.getContributor().getName(); + } + } + if (classname != null && bundleName != null) { + Bundle bundle = Platform.getBundle(bundleName); + try { + Class<?> taskClass = bundle.loadClass(classname); + Object obj = taskClass.newInstance(); + IDefineNavigateItem task = (IDefineNavigateItem) obj; + items.addAll(task.getNavigateItems()); + } catch (Exception ex) { + OSEELog.logException(DefinePlugin.class, "Error loading DefineNavigateItem extension", ex, true); + } + } + } + } +}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateViewerSorter.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateViewerSorter.java new file mode 100644 index 00000000000..70ad4d49b27 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/DefineNavigateViewerSorter.java @@ -0,0 +1,40 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.navigate; + +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerSorter; +import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItem; + +/** + * @author Donald G. Dunne + */ +public class DefineNavigateViewerSorter extends ViewerSorter { + + /** + * @param treeViewer + */ + public DefineNavigateViewerSorter() { + super(); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) + */ + @SuppressWarnings("unchecked") + @Override + public int compare(Viewer viewer, Object e1, Object e2) { + XNavigateItem item1 = (XNavigateItem) e1; + XNavigateItem item2 = (XNavigateItem) e2; + return getComparator().compare(item1.getName(), item2.getName()); + } + +} diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/IDefineNavigateItem.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/IDefineNavigateItem.java new file mode 100644 index 00000000000..17ee37995d7 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/navigate/IDefineNavigateItem.java @@ -0,0 +1,23 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.navigate; + +import java.util.List; +import org.eclipse.osee.framework.ui.skynet.widgets.xnavigate.XNavigateItem; + +/** + * @author Donald G. Dunne + */ +public interface IDefineNavigateItem { + + public List<XNavigateItem> getNavigateItems(); + +} diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/Import/ExtractTestRelations.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/Import/ExtractTestRelations.java new file mode 100644 index 00000000000..db4cdc8fcf2 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/Import/ExtractTestRelations.java @@ -0,0 +1,136 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.relation.Import; + +import java.io.File; +import java.io.IOException; +import java.nio.CharBuffer; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Level; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.osee.define.DefinePlugin; +import org.eclipse.osee.framework.db.connection.exception.ArtifactDoesNotExist; +import org.eclipse.osee.framework.db.connection.exception.MultipleArtifactsExist; +import org.eclipse.osee.framework.db.connection.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.text.FindResults; +import org.eclipse.osee.framework.jdk.core.text.tool.Find; +import org.eclipse.osee.framework.jdk.core.util.Lib; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; +import org.eclipse.osee.framework.skynet.core.artifact.Branch; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; +import org.eclipse.osee.framework.skynet.core.utility.Requirements; +import org.eclipse.osee.framework.ui.plugin.util.AWorkspace; + +public class ExtractTestRelations { + private String scriptsDir; + private String fileNamePattern; + private Branch branch; + private static final Matcher testScriptMatcher = Pattern.compile("doTestCase").matcher(""); + private static final Matcher traceabilityMatcher = Pattern.compile("RequirementId\\(\\\"([^\\\"]+)\\\"").matcher(""); + + public ExtractTestRelations(String scriptsDir, String fileNamePattern, Branch branch) { + super(); + this.scriptsDir = scriptsDir; + this.fileNamePattern = fileNamePattern; + this.branch = branch; + } + + public void run() { + ArrayList<String> patterns = new ArrayList<String>(); + patterns.add(scriptsDir); + Find app = new Find("RequirementId\\(\\\"([^\\\"]+)\\\"", new File(scriptsDir), fileNamePattern); + app.find(999999, true); + FindResults results = app.getResults(); + + for (FindResults.FindResultsIterator i = results.iterator(); i.hasNext();) { + try { + addRelationToDatabaseIfNotAlreadyThere(AWorkspace.fileToIFile(i.currentFile), i.currentRegion); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + } + + public static void traceabilityReport() throws IOException { + Pattern javaFilePattern = Pattern.compile(".*\\.java"); + for (IProject project : AWorkspace.getProjects()) { + File projectLocation = project.getLocation().toFile(); + for (File javaFile : (List<File>) Lib.recursivelyListFiles(projectLocation, javaFilePattern)) { + CharBuffer buf = Lib.fileToCharBuffer(javaFile); + testScriptMatcher.reset(buf); + if (testScriptMatcher.find()) { + traceabilityMatcher.reset(buf); + while (traceabilityMatcher.find()) { + System.out.println(javaFile.getName() + ", " + traceabilityMatcher.group(1)); + } + } else { + System.out.println(javaFile + ": no traceability"); + } + } + } + } + + private void addRelationToDatabaseIfNotAlreadyThere(IFile testArtifactFile, String reqArtifactName) throws OseeCoreException { + + // Make sure that the runtime relation type is available + Artifact reqArtifact = + ArtifactQuery.getArtifactFromTypeAndName(Requirements.SOFTWARE_REQUIREMENT, reqArtifactName, branch); + + // Make sure we have the reqArtifact + if (reqArtifact == null) { + System.out.println("Unable to locate the requirement named:\"" + reqArtifactName + "\""); + return; + } + + // TODO replace the null here with the Test_TestSide relationSide enumeration + reqArtifact.addRelation(null, getTestArtifact(testArtifactFile, reqArtifact.getBranch())); + // Get a new test relation with the same tag as the requirement artifact + // UserRelation testRelation = relationManager.getUserRelationDescriptor("Test").makeNewUserRelation(reqArtifact.getTag()); + // RelationLink link = relationManager.getRelationLinkDescriptor("Test").makeNewLink(); + + // Add the items to the relation + // link.setArtifact("Requirement", reqArtifact); + // link.setArtifact("Test", getTestArtifact(testArtifactName, reqArtifact.getTag())); + // reqArtifact.getLinkManager().addLink(link); + // + // link.setArtifactA(reqArtifact); + // link.setArtifactB(getTestArtifact(testArtifactName, reqArtifact.getTag())); + // link.persist(); + + // testRelation.addArtifact("test", getTestArtifact(testArtifactName, reqArtifact.getTag())); + // testRelation.addArtifact("requirement", reqArtifact); + + // Save the relation + // link.persist(); + } + + private Artifact getTestArtifact(IFile testArtifactFile, Branch branch) throws OseeCoreException { + try { + return ArtifactQuery.getArtifactFromTypeAndName(Requirements.TEST_SCRIPT, testArtifactFile.getName(), branch); + } catch (MultipleArtifactsExist ex) { + OseeLog.log(DefinePlugin.class, Level.SEVERE, ex); + return null; + } catch (ArtifactDoesNotExist ex) { + Artifact testArtifact = + ArtifactTypeManager.addArtifact(Requirements.TEST_SCRIPT, branch, testArtifactFile.getName()); + testArtifact.setSoleAttributeValue("Content URL", testArtifactFile.getFullPath().toString()); + testArtifact.persistAttributes(); + return testArtifact; + } + } +} diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/Import/RelationImporter.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/Import/RelationImporter.java new file mode 100644 index 00000000000..67cd68b1d81 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/Import/RelationImporter.java @@ -0,0 +1,174 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.relation.Import; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.Collection; +import java.util.logging.Level; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.osee.framework.jdk.core.util.io.xml.ExcelSaxHandler; +import org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor; +import org.eclipse.osee.framework.logging.OseeLog; +import org.eclipse.osee.framework.skynet.core.SkynetActivator; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactPersistenceManager; +import org.eclipse.osee.framework.skynet.core.artifact.Branch; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; +import org.eclipse.osee.framework.skynet.core.relation.CoreRelationEnumeration; +import org.eclipse.osee.framework.skynet.core.utility.Requirements; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.XMLReaderFactory; + +/** + * @author Ryan D. Brooks + */ +public class RelationImporter implements RowProcessor { + private static final ArtifactPersistenceManager artifactManager = ArtifactPersistenceManager.getInstance(); + private static final int leadingColumnCount = 2; + private final ExcelSaxHandler excelHandler; + private final XMLReader xmlReader; + private Artifact[] columnArtifacts; + private IProgressMonitor monitor; + private boolean done; + private final Branch branch; + + /** + * @throws SAXException + */ + public RelationImporter(Branch branch) throws SAXException { + this.branch = branch; + excelHandler = new ExcelSaxHandler(this, true, true); + + xmlReader = XMLReaderFactory.createXMLReader(); + xmlReader.setContentHandler(excelHandler); + } + + public void extractRelationsFromSheet(InputStream importStream, IProgressMonitor monitor) throws IOException, SAXException { + this.monitor = monitor; + xmlReader.parse(new InputSource(importStream)); + } + + /* (non-Javadoc) + * @see org.eclipse.osee.define.artifact.Import.RowProcessor#processRow(java.lang.String[]) + */ + public void processRow(String[] row) { + if (done) return; + try { + monitor.worked(1); + Collection<Artifact> artifacts = + ArtifactQuery.getArtifactsFromTypeAndAttribute(Requirements.SUBSYSTEM_REQUIREMENT, + "Imported Paragraph Number", row[1], branch); + + Artifact rowArtifact; + try { + rowArtifact = getSoleArtifact(artifacts); + } catch (IllegalArgumentException ex) { + OseeLog.log(SkynetActivator.class, Level.SEVERE, ex); + return; + } + + if (rowArtifact == null) { + System.out.println("Skipping " + row[0] + " becuase no matching artifact was found"); + } else { + if (!row[0].equals(rowArtifact.getDescriptiveName())) { + System.out.printf("Warning %s != %s%n", row[0], rowArtifact.getDescriptiveName()); + } + monitor.subTask(rowArtifact.getDescriptiveName()); + for (int i = 0; i < columnArtifacts.length; i++) { + String rationale = row[i + leadingColumnCount]; + if (rationale != null) { + if (rationale.equalsIgnoreCase("x")) { + rationale = ""; + } + columnArtifacts[i].addRelation(CoreRelationEnumeration.ALLOCATION__REQUIREMENT, rowArtifact, + rationale); + columnArtifacts[i].persistRelations(); + } + } + } + } catch (Exception ex) { + OseeLog.log(SkynetActivator.class, Level.SEVERE, ex); + } + } + + private Artifact getSoleArtifact(Collection<Artifact> artifacts) { + Artifact artifactResult = null; + boolean soleArtifact = true; + for (Artifact artifact : artifacts) { + if (soleArtifact) { + soleArtifact = false; + } else { + throw new IllegalArgumentException("Found more than one match for: " + artifact); + } + artifactResult = artifact; + } + return artifactResult; + } + + /* (non-Javadoc) + * @see org.eclipse.osee.define.artifact.Import.RowProcessor#processHeaderRow(java.lang.String[]) + */ + public void processHeaderRow(String[] row) { + monitor.setTaskName("Aquire Column Artifacts"); + columnArtifacts = new Artifact[row.length - leadingColumnCount]; + for (int i = 0; i < columnArtifacts.length; i++) { + monitor.worked(1); + try { + Collection<Artifact> artifacts = + ArtifactQuery.getArtifactsFromTypeAndName(Requirements.COMPONENT, row[i + leadingColumnCount], branch); + + columnArtifacts[i] = getSoleArtifact(artifacts); + monitor.subTask(columnArtifacts[i].getDescriptiveName()); + } catch (Exception ex) { + System.out.println(ex); + } + } + System.out.println(Arrays.deepToString(columnArtifacts)); + monitor.setTaskName("Relate Row Artifacts"); + } + + /* (non-Javadoc) + * @see org.eclipse.osee.define.artifact.Import.RowProcessor#processEmptyRow() + */ + public void processEmptyRow() { + } + + /* (non-Javadoc) + * @see org.eclipse.osee.define.artifact.Import.RowProcessor#processCommentRow(java.lang.String[]) + */ + public void processCommentRow(String[] row) { + } + + /* (non-Javadoc) + * @see org.eclipse.osee.define.artifact.Import.RowProcessor#reachedEndOfWorksheet() + */ + public void reachedEndOfWorksheet() { + monitor.done(); + done = true; + } + + /* (non-Javadoc) + * @see org.eclipse.osee.define.artifact.Import.RowProcessor#detectedTotalRowCount(int) + */ + public void detectedRowAndColumnCounts(int rowCount, int columnCount) { + monitor.beginTask("Importing Relations", rowCount + columnCount - leadingColumnCount); + } + + /* (non-Javadoc) + * @see org.eclipse.osee.define.artifact.Import.RowProcessor#foundStartOfWorksheet(java.lang.String) + */ + public void foundStartOfWorksheet(String sheetName) { + } +} diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/TreeViewerTest.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/TreeViewerTest.java new file mode 100644 index 00000000000..00023bf9d34 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/relation/TreeViewerTest.java @@ -0,0 +1,244 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.relation; + +import java.io.File; +import java.util.Date; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.ILabelProviderListener; +import org.eclipse.jface.viewers.ITableColorProvider; +import org.eclipse.jface.viewers.ITableFontProvider; +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.ITreeContentProvider; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.FormAttachment; +import org.eclipse.swt.layout.FormData; +import org.eclipse.swt.layout.FormLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.DirectoryDialog; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Tree; +import org.eclipse.swt.widgets.TreeColumn; + +public class TreeViewerTest { + + class TreeViewerTestLabelProvider implements ITableLabelProvider, ITableColorProvider, ITableFontProvider { + Font font = null; + + public String getColumnText(Object element, int columnIndex) { + if (!(element instanceof File)) return null; + File file = (File) element; + switch (columnIndex) { + case 0: + return file.getName(); + case 1: + return "" + new Date(file.lastModified()); + case 2: + return "" + file.isHidden(); + } + return null; + } + + public Image getColumnImage(Object element, int columnIndex) { + if (columnIndex != 0) return null; + if (!(element instanceof File)) return null; + File file = (File) element; + Display display = Display.getCurrent(); + if (file.isDirectory()) return display.getSystemImage(SWT.ICON_WARNING); + return display.getSystemImage(SWT.ICON_QUESTION); + } + + public void dispose() { + if (font != null) font.dispose(); + font = null; + } + + public boolean isLabelProperty(Object element, String property) { + return false; + } + + public void addListener(ILabelProviderListener listener) { + } + + public void removeListener(ILabelProviderListener listener) { + } + + public Color getForeground(Object element, int columnIndex) { + if (columnIndex == 1) { + Display display = Display.getCurrent(); + return display.getSystemColor(SWT.COLOR_RED); + } + return null; + } + + public Color getBackground(Object element, int columnIndex) { + if (columnIndex == 0) { + File file = (File) element; + Display display = Display.getCurrent(); + if (file.isDirectory()) return display.getSystemColor(SWT.COLOR_CYAN); + return display.getSystemColor(SWT.COLOR_MAGENTA); + } + return null; + } + + public Font getFont(Object element, int columnIndex) { + if (columnIndex == 2) { + if (font == null) { + Display display = Display.getCurrent(); + font = new Font(display, "Times", 12, SWT.ITALIC); + } + return font; + } + return null; + } + } + + public static void main(String[] args) { + final Display display = new Display(); + final Shell shell = new Shell(display); + shell.setLayout(new FormLayout()); + + TreeViewerTestLabelProvider labelProvider1 = new TreeViewerTest().new TreeViewerTestLabelProvider(); + ITreeContentProvider contentProvider = new ITreeContentProvider() { + public Object[] getChildren(Object parentElement) { + if (!(parentElement instanceof File)) return null; + File file = (File) parentElement; + if (file.isDirectory()) return file.listFiles(); + return null; + } + + public Object getParent(Object element) { + if (!(element instanceof File)) return null; + File file = (File) element; + return file.getParentFile(); + } + + public boolean hasChildren(Object element) { + if (!(element instanceof File)) return false; + File file = (File) element; + return file.isDirectory(); + } + + public Object[] getElements(Object inputElement) { + return getChildren(inputElement); + } + + public void dispose() { + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + } + }; + + ILabelProvider labelProvider2 = new ILabelProvider() { + public void dispose() { + } + + public boolean isLabelProperty(Object element, String property) { + return false; + } + + public void addListener(ILabelProviderListener listener) { + } + + public void removeListener(ILabelProviderListener listener) { + } + + public Image getImage(Object element) { + if (!(element instanceof File)) return null; + File file = (File) element; + if (file.isDirectory()) return display.getSystemImage(SWT.ICON_WARNING); + return display.getSystemImage(SWT.ICON_QUESTION); + } + + public String getText(Object element) { + if (!(element instanceof File)) return null; + File file = (File) element; + return file.getName(); + } + + }; + + final TreeViewer treeViewer1 = new TreeViewer(shell, SWT.FULL_SELECTION | SWT.CHECK); + Tree tree1 = treeViewer1.getTree(); + tree1.setHeaderVisible(true); + TreeColumn column1 = new TreeColumn(tree1, SWT.LEFT); + column1.setText("Name"); + column1.setImage(display.getSystemImage(SWT.ICON_WORKING)); + column1.setWidth(200); + TreeColumn column2 = new TreeColumn(tree1, SWT.CENTER); + column2.setText("Last Modified"); + column2.setImage(display.getSystemImage(SWT.ICON_INFORMATION)); + column2.setWidth(200); + TreeColumn column3 = new TreeColumn(tree1, SWT.CENTER); + column3.setText("Hidden"); + column3.setImage(display.getSystemImage(SWT.ICON_INFORMATION)); + column3.setWidth(100); + treeViewer1.setLabelProvider(labelProvider1); + treeViewer1.setContentProvider(contentProvider); + + final TreeViewer treeViewer2 = new TreeViewer(shell); + Tree tree2 = treeViewer2.getTree(); + treeViewer2.setLabelProvider(labelProvider2); + treeViewer2.setContentProvider(contentProvider); + + Button b = new Button(shell, SWT.PUSH); + b.setText("choose root folder"); + b.addListener(SWT.Selection, new Listener() { + public void handleEvent(Event e) { + DirectoryDialog f = new DirectoryDialog(shell, SWT.OPEN); + String root = f.open(); + if (root != null) { + File file = new File(root); + if (file.exists()) { + treeViewer1.setInput(file); + treeViewer1.refresh(); + treeViewer2.setInput(file); + treeViewer2.refresh(); + } + } + } + }); + + FormData data = new FormData(); + data.left = new FormAttachment(0, 10); + data.top = new FormAttachment(0, 10); + data.right = new FormAttachment(50, -5); + data.bottom = new FormAttachment(b, -10); + tree1.setLayoutData(data); + + data = new FormData(); + data.left = new FormAttachment(50, 5); + data.top = new FormAttachment(0, 10); + data.right = new FormAttachment(100, -10); + data.bottom = new FormAttachment(b, -10); + tree2.setLayoutData(data); + + data = new FormData(); + data.left = new FormAttachment(0, 10); + data.bottom = new FormAttachment(100, -10); + b.setLayoutData(data); + + shell.open(); + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) display.sleep(); + } + display.dispose(); + } +} diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityJob.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityJob.java new file mode 100644 index 00000000000..770861b93e2 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityJob.java @@ -0,0 +1,249 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.traceability; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.regex.Pattern; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.osee.define.DefinePlugin; +import org.eclipse.osee.framework.db.connection.exception.OseeArgumentException; +import org.eclipse.osee.framework.db.connection.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.type.CountingMap; +import org.eclipse.osee.framework.jdk.core.type.HashCollection; +import org.eclipse.osee.framework.jdk.core.type.Pair; +import org.eclipse.osee.framework.jdk.core.util.Collections; +import org.eclipse.osee.framework.jdk.core.util.Lib; +import org.eclipse.osee.framework.jdk.core.util.io.CharBackedInputStream; +import org.eclipse.osee.framework.jdk.core.util.io.xml.ExcelXmlWriter; +import org.eclipse.osee.framework.jdk.core.util.io.xml.ISheetWriter; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.Branch; +import org.eclipse.osee.framework.skynet.core.attribute.WordAttribute; +import org.eclipse.osee.framework.skynet.core.utility.Requirements; +import org.eclipse.osee.framework.skynet.core.word.WordUtil; +import org.eclipse.osee.framework.ui.plugin.util.AIFile; +import org.eclipse.osee.framework.ui.plugin.util.OseeData; +import org.eclipse.swt.program.Program; + +/** + * @author Ryan D. Brooks + */ +public class ImportTraceabilityJob extends Job { + private static final Pattern filePattern = Pattern.compile(".*\\.(java|ada|ads|adb|c|h)"); + private static final TraceabilityExtractor traceExtractor = TraceabilityExtractor.getInstance(); + + private final File file; + private final RequirementData requirementData; + private final ArrayList<String> noTraceabilityFiles; + private final CountingMap<Artifact> reqsTraceCounts; + private final HashCollection<Artifact, String> requirementToCodeUnitsMap; + private final HashSet<String> codeUnits; + private final CharBackedInputStream charBak; + private final ISheetWriter excelWriter; + private int pathPrefixLength; + private boolean writeOutResults; + + public ImportTraceabilityJob(File file, Branch branch, boolean writeOutResults) throws CoreException, IOException { + super("Importing Traceability"); + this.file = file; + this.requirementData = new RequirementData(branch); + noTraceabilityFiles = new ArrayList<String>(200); + reqsTraceCounts = new CountingMap<Artifact>(); + codeUnits = new HashSet<String>(); + requirementToCodeUnitsMap = new HashCollection<Artifact, String>(false, LinkedList.class); + charBak = new CharBackedInputStream(); + excelWriter = new ExcelXmlWriter(charBak.getWriter()); + this.writeOutResults = writeOutResults; + } + + /* + * (non-Javadoc) + * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor) + */ + public IStatus run(IProgressMonitor monitor) { + IStatus toReturn = Status.CANCEL_STATUS; + try { + monitor.beginTask("Importing From " + file.getName(), 100); + monitor.worked(1); + + toReturn = requirementData.initialize(monitor); + if (toReturn.getSeverity() == IStatus.OK) { + if (monitor.isCanceled() != true) { + if (writeOutResults) { + excelWriter.startSheet("srs <--> code units", 6); + excelWriter.writeRow("Req in DB", "Code Unit", "Requirement Name", "Requirement Trace Mark in Code"); + } + + if (file.isFile()) { + for (String path : Lib.readListFromFile(file, true)) { + monitor.subTask(path); + handleDirectory(new File(path)); + if (monitor.isCanceled() == true) { + break; + } + } + } else if (file.isDirectory()) { + handleDirectory(file); + } else { + throw new IllegalStateException("unexpected file system type"); + } + + if (writeOutResults && monitor.isCanceled() != true) { + excelWriter.endSheet(); + + writeNoTraceFilesSheet(); + writeTraceCountsSheet(); + + excelWriter.endWorkbook(); + IFile iFile = OseeData.getIFile("CodeUnit_To_SRS_Trace.xml"); + AIFile.writeToFile(iFile, charBak); + Program.launch(iFile.getLocation().toOSString()); + } + + if (monitor.isCanceled() != true) { + toReturn = Status.OK_STATUS; + } else { + toReturn = Status.CANCEL_STATUS; + } + } + } + } catch (Exception ex) { + toReturn = new Status(Status.ERROR, DefinePlugin.PLUGIN_ID, -1, ex.getLocalizedMessage(), ex); + } finally { + monitor.done(); + } + return toReturn; + } + + private void handleDirectory(File directory) throws IOException, OseeCoreException { + if (directory == null || directory.getParentFile() == null) { + throw new OseeArgumentException("The path " + directory + " is invalid."); + } + + pathPrefixLength = directory.getParentFile().getAbsolutePath().length(); + + for (File sourceFile : Lib.recursivelyListFiles(directory, filePattern)) { + List<String> traceMarks = traceExtractor.getTraceMarksFromFile(sourceFile); + + int matchCount = 0; + String relativePath = sourceFile.getPath().substring(pathPrefixLength); + codeUnits.add(relativePath); + for (String traceMark : traceMarks) { + handelReqTrace(relativePath, traceMark); + matchCount++; + } + if (matchCount == 0) { + noTraceabilityFiles.add(relativePath); + } + } + } + + private void writeNoTraceFilesSheet() throws IOException { + excelWriter.startSheet("no match files", 1); + for (String path : noTraceabilityFiles) { + excelWriter.writeRow(path); + } + excelWriter.endSheet(); + } + + private void writeTraceCountsSheet() throws IOException, OseeCoreException { + excelWriter.startSheet("trace counts", 3); + excelWriter.writeRow("SRS Requirement from Database", "Trace Count", "Partitions"); + excelWriter.writeRow("% requirement coverage", null, "=1-COUNTIF(C2,"0")/COUNTA(C2)"); + + for (Artifact artifact : requirementData.getDirectSwRequirements()) { + excelWriter.writeRow(artifact.getDescriptiveName(), String.valueOf(reqsTraceCounts.get(artifact)), + Collections.toString(",", artifact.getAttributesToStringList(Requirements.PARTITION))); + } + + excelWriter.endSheet(); + } + + private void handelReqTrace(String path, String traceMark) throws OseeCoreException, IOException { + String foundStr; + Artifact reqArtifact = null; + + if (traceExtractor.isValidTraceMark(traceMark) != true) { + foundStr = "invalid trace mark"; + } else { + reqArtifact = requirementData.getRequirementFromTraceMark(traceMark); + if (reqArtifact == null) { + Pair<String, String> structuredRequirement = traceExtractor.getStructuredRequirement(traceMark); + if (structuredRequirement != null) { + reqArtifact = requirementData.getRequirementFromTraceMark(structuredRequirement.getKey()); + + if (reqArtifact == null) { + foundStr = "no match in DB"; + } else { + // for local data and procedures search requirement text for traceMark + // example local data [{SUBSCRIBER}.ID] and example procedure {CURSOR_ACKNOWLEDGE}.NORMAL + String textContent = + WordUtil.textOnly(reqArtifact.getSoleAttributeValue(WordAttribute.WORD_TEMPLATE_CONTENT, "")).toUpperCase(); + if (textContent.contains(traceExtractor.getCanonicalRequirementName(structuredRequirement.getValue()))) { + foundStr = "req body match"; + } else { + foundStr = "paritial match"; + } + } + } else { + foundStr = "no match in DB"; + } + } else { + foundStr = fullMatch(reqArtifact); + } + } + + String name = null; + if (reqArtifact != null) { + name = reqArtifact.getDescriptiveName(); + requirementToCodeUnitsMap.put(reqArtifact, path); + } + + if (writeOutResults) { + excelWriter.writeRow(foundStr, path, name, traceMark); + } + } + + private String fullMatch(Artifact reqArtifact) { + reqsTraceCounts.put(reqArtifact); + return "full match"; + } + + public HashCollection<Artifact, String> getRequirementToCodeUnitsMap() { + return requirementToCodeUnitsMap; + } + + /** + * @return the codeUnits + */ + public HashSet<String> getCodeUnits() { + return codeUnits; + } + + /** + * Get all direct and indirect software requirements + * + * @return requirement data + */ + public RequirementData getRequirementData() { + return requirementData; + } +}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityPage.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityPage.java new file mode 100644 index 00000000000..43c51c750a3 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityPage.java @@ -0,0 +1,145 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.traceability; + +import java.io.File; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.osee.framework.skynet.core.artifact.Branch; +import org.eclipse.osee.framework.ui.plugin.util.DirectoryOrFileSelector; +import org.eclipse.osee.framework.ui.skynet.branch.BranchSelectComposite; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Group; +import org.eclipse.ui.dialogs.WizardDataTransferPage; + +/** + * @author Ryan D. Brooks + */ +public class ImportTraceabilityPage extends WizardDataTransferPage { + public static final String PAGE_NAME = "org.eclipse.osee.define.wizardPage.importTraceabilityPage"; + + private DirectoryOrFileSelector directoryFileSelector; + private BranchSelectComposite branchSelectComposite; + + private IResource currentResourceSelection; + + /** + * @param name + * @param selection + */ + public ImportTraceabilityPage(IStructuredSelection selection) { + super(PAGE_NAME); + + setTitle("Import traceability into OSEE Define"); + setDescription("Import relations between artifacts"); + + if (selection != null && selection.size() == 1) { + Object firstElement = selection.getFirstElement(); + if (firstElement instanceof IAdaptable) { + currentResourceSelection = (IResource) ((IAdaptable) firstElement).getAdapter(IResource.class); + } + } + } + + /** + * (non-Javadoc) Method declared on IDialogPage. + */ + public void createControl(Composite parent) { + + initializeDialogUnits(parent); + + Composite composite = new Composite(parent, SWT.NULL); + composite.setLayout(new GridLayout()); + composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL)); + composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); + composite.setFont(parent.getFont()); + + createSourceGroup(composite); + + restoreWidgetValues(); + updateWidgetEnablements(); + setPageComplete(determinePageCompletion()); + + setControl(composite); + } + + /** + * The <code>WizardResourceImportPage</code> implementation of this <code>Listener</code> method handles all events + * and enablements for controls on this page. Subclasses may extend. + * + * @param event Event + */ + public void handleEvent(Event event) { + setPageComplete(determinePageCompletion()); + } + + protected void createSourceGroup(Composite parent) { + directoryFileSelector = new DirectoryOrFileSelector(parent, SWT.NONE, "Import Source", this); + + if (currentResourceSelection == null) { + // Select directory as the default + directoryFileSelector.setDirectorySelected(true); + } else { + directoryFileSelector.setDirectorySelected(currentResourceSelection.getType() != IResource.FILE); + directoryFileSelector.setText(currentResourceSelection.getLocation().toString()); + } + + Group composite = new Group(parent, SWT.NONE); + composite.setText("Destination Branch"); + GridLayout gd = new GridLayout(); + composite.setLayout(gd); + composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + + branchSelectComposite = new BranchSelectComposite(composite, SWT.BORDER, false); + + setPageComplete(determinePageCompletion()); + } + + /* + * @see WizardPage#becomesVisible + */ + @Override + public void setVisible(boolean visible) { + super.setVisible(visible); + // policy: wizards are not allowed to come up with an error message + if (visible) { + setErrorMessage(null); + } + } + + @Override + protected boolean validateSourceGroup() { + return directoryFileSelector.validate(this); + } + + public File getImportFile() { + return directoryFileSelector.getFile(); + } + + public Branch getSelectedBranch() { + return branchSelectComposite.getSelectedBranch(); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.dialogs.WizardResourceImportPage#allowNewContainerName() + */ + @Override + protected boolean allowNewContainerName() { + return false; + } +}
\ No newline at end of file diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityWizard.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityWizard.java new file mode 100644 index 00000000000..17ca1d32743 --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/ImportTraceabilityWizard.java @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Boeing. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.define.traceability; + +import java.io.File; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.osee.framework.skynet.core.artifact.Branch; +import org.eclipse.osee.framework.ui.plugin.util.Jobs; +import org.eclipse.osee.framework.ui.skynet.util.OSEELog; +import org.eclipse.ui.IImportWizard; +import org.eclipse.ui.IWorkbench; + +/** + * @author Ryan D. Brooks + */ +public class ImportTraceabilityWizard extends Wizard implements IImportWizard { + private ImportTraceabilityPage mainPage; + private IStructuredSelection selection; + + /** + * + */ + public ImportTraceabilityWizard() { + super(); + setWindowTitle("Traceability Import Wizard"); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.wizard.Wizard#performFinish() + */ + @Override + public boolean performFinish() { + try { + Branch branch = mainPage.getSelectedBranch(); + File file = mainPage.getImportFile(); + Jobs.startJob(new ImportTraceabilityJob(file, branch, true)); + } catch (Exception ex) { + OSEELog.logException(getClass(), "Traceability Import Error", ex, true); + } + return true; + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.IWorkbenchWizard#init(org.eclipse.ui.IWorkbench, + * org.eclipse.jface.viewers.IStructuredSelection) + */ + public void init(IWorkbench workbench, IStructuredSelection selection) { + this.selection = selection; + } + + /** + * (non-Javadoc) Method declared on Wizard. + */ + public void addPages() { + mainPage = new ImportTraceabilityPage(selection); + addPage(mainPage); + } +} diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/RequirementData.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/RequirementData.java new file mode 100644 index 00000000000..6e0c760adca --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/RequirementData.java @@ -0,0 +1,164 @@ +/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.define.traceability;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.osee.define.DefinePlugin;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.artifact.Branch;
+import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery;
+import org.eclipse.osee.framework.skynet.core.utility.Requirements;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class RequirementData {
+ private static final TraceabilityExtractor traceExtractor = TraceabilityExtractor.getInstance();
+
+ private Branch requirementsBranch;
+ private List<Artifact> directSwRequirements;
+ private List<Artifact> inDirectSwRequirements;
+ private Set<Artifact> allSwRequirements;
+
+ private final HashMap<String, Artifact> directMap;
+ private final HashMap<String, Artifact> indirectMap;
+
+ public RequirementData(Branch requirementsBranch) {
+ this.requirementsBranch = requirementsBranch;
+
+ this.directMap = new HashMap<String, Artifact>();
+ this.indirectMap = new HashMap<String, Artifact>();
+ this.directSwRequirements = new ArrayList<Artifact>();
+ this.inDirectSwRequirements = new ArrayList<Artifact>();
+ this.allSwRequirements = new TreeSet<Artifact>();
+ }
+
+ private void reset() {
+ this.directMap.clear();
+ this.indirectMap.clear();
+ this.directSwRequirements.clear();
+ this.inDirectSwRequirements.clear();
+ this.allSwRequirements.clear();
+ }
+
+ public IStatus initialize(IProgressMonitor monitor) {
+ IStatus toReturn = Status.CANCEL_STATUS;
+ try {
+ reset();
+ monitor.subTask(String.format("Loading Software Requirements from: [%s]", getBranch().getBranchShortName()));
+
+ directSwRequirements.addAll(ArtifactQuery.getArtifactsFromType(Requirements.SOFTWARE_REQUIREMENT, getBranch()));
+ populateTraceMap(monitor, directSwRequirements, directMap);
+ monitor.worked(30);
+
+ if (monitor.isCanceled() != true) {
+ monitor.subTask(String.format("Load Indirect Software Requirements from: [%s]",
+ getBranch().getBranchShortName()));
+ inDirectSwRequirements.addAll(ArtifactQuery.getArtifactsFromType(
+ Requirements.INDIRECT_SOFTWARE_REQUIREMENT, getBranch()));
+ populateTraceMap(monitor, inDirectSwRequirements, indirectMap);
+ monitor.worked(7);
+
+ if (monitor.isCanceled() != true) {
+ allSwRequirements.addAll(directSwRequirements);
+ allSwRequirements.addAll(inDirectSwRequirements);
+ monitor.worked(1);
+ }
+ }
+ if (monitor.isCanceled() != true) {
+ toReturn = Status.OK_STATUS;
+ }
+ } catch (Exception ex) {
+ toReturn = new Status(IStatus.ERROR, DefinePlugin.PLUGIN_ID, "Loading requirement data.", ex);
+ }
+ return toReturn;
+ }
+
+ private void populateTraceMap(IProgressMonitor monitor, List<Artifact> artList, HashMap<String, Artifact> toPopulate) {
+ for (Artifact artifact : artList) {
+ toPopulate.put(traceExtractor.getCanonicalRequirementName(artifact.getDescriptiveName()), artifact);
+ }
+ }
+
+ /**
+ * Get requirements source branch
+ *
+ * @return source branch
+ */
+ public Branch getBranch() {
+ return requirementsBranch;
+ }
+
+ /**
+ * @return the directSwRequirements
+ */
+ public Collection<Artifact> getDirectSwRequirements() {
+ return directSwRequirements;
+ }
+
+ /**
+ * @return the inDirectSwRequirements
+ */
+ public Collection<Artifact> getInDirectSwRequirements() {
+ return inDirectSwRequirements;
+ }
+
+ /**
+ * @return the allSwRequirements
+ */
+ public Set<Artifact> getAllSwRequirements() {
+ return allSwRequirements;
+ }
+
+ /**
+ * Get Requirement Artifact based on traceMark mark
+ *
+ * @param traceMark
+ * @return requirement artifact
+ */
+ public Artifact getRequirementFromTraceMark(String traceMark) {
+ String canonicalTraceMark = TraceabilityExtractor.getInstance().getCanonicalRequirementName(traceMark);
+ Artifact reqArtifact = directMap.get(canonicalTraceMark);
+ if (reqArtifact == null) {
+ reqArtifact = indirectMap.get(canonicalTraceMark);
+ }
+ return reqArtifact;
+ }
+
+ /**
+ * Get Requirement Artifact based on traceMark mark if it fails, check if trace mark is a structured requirement and
+ * try again
+ *
+ * @param traceMark
+ * @return requirement artifact
+ */
+ public Artifact getRequirementFromTraceMarkIncludeStructuredRequirements(String traceMark) {
+ Artifact toReturn = getRequirementFromTraceMark(traceMark);
+ if (toReturn == null) {
+ Pair<String, String> structured = TraceabilityExtractor.getInstance().getStructuredRequirement(traceMark);
+ if (structured != null) {
+ toReturn = getRequirementFromTraceMark(structured.getKey());
+ }
+ }
+ return toReturn;
+ }
+
+}
diff --git a/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/TraceabilityExtractor.java b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/TraceabilityExtractor.java new file mode 100644 index 00000000000..8657786bf7b --- /dev/null +++ b/org.eclipse.osee.define/src/org/eclipse/osee/define/traceability/TraceabilityExtractor.java @@ -0,0 +1,126 @@ +/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.osee.define.traceability;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.CharBuffer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.eclipse.osee.framework.jdk.core.type.Pair;
+import org.eclipse.osee.framework.jdk.core.util.Lib;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+
+/**
+ * @author Roberto E. Escobar
+ */
+public class TraceabilityExtractor {
+ private static final Pattern ofpTraceabilityPattern = Pattern.compile("\\^SRS\\s*([^;\n\r]+);");
+ private static final Pattern scriptTraceabilityPattern =
+ Pattern.compile("addTraceability\\s*\\(\\\"(?:SubDD|SRS|CSID)?\\s*([^\\\"]+)\\\"");
+ private static final Pattern invalidTraceabilityPattern = Pattern.compile("(\\[[A-Za-z]|USES_).*");
+
+ private static final Pattern embeddedVolumePattern = Pattern.compile("\\{\\d+ (.*)\\}[ .]*");
+ private static final Pattern nonWordPattern = Pattern.compile("[^A-Z_0-9]");
+ private static final Pattern structuredReqNamePattern = Pattern.compile("\\[?(\\{[^\\}]+\\})(.*)");
+
+ private static TraceabilityExtractor instance = null;
+ private final Matcher scriptReqTraceMatcher;
+ private final Matcher ofpReqTraceMatcher;
+ private final Matcher invalidTraceMatcher;
+ private final Matcher embeddedVolumeMatcher;
+ private final Matcher nonWordMatcher;
+ private final Matcher structuredRequirementMatcher;
+
+ private TraceabilityExtractor() {
+ this.ofpReqTraceMatcher = ofpTraceabilityPattern.matcher("");
+ this.scriptReqTraceMatcher = scriptTraceabilityPattern.matcher("");
+ this.invalidTraceMatcher = invalidTraceabilityPattern.matcher("");
+ this.embeddedVolumeMatcher = embeddedVolumePattern.matcher("");
+ this.nonWordMatcher = nonWordPattern.matcher("");
+ this.structuredRequirementMatcher = structuredReqNamePattern.matcher("");
+ }
+
+ public static TraceabilityExtractor getInstance() {
+ if (instance == null) {
+ instance = new TraceabilityExtractor();
+ }
+ return instance;
+ }
+
+ public List<String> getTraceMarksFromFile(File sourceFile) throws IOException {
+ CharBuffer buffer = Lib.fileToCharBuffer(sourceFile);
+ Matcher matcher = isScriptFile(sourceFile) ? getScriptTraceMarkMatcher() : getCodeTraceMarkMatcher();
+ return getTraceMarks(buffer, matcher);
+ }
+
+ public List<String> getTraceMarks(CharBuffer buffer, Matcher matcher) {
+ List<String> toReturn = new ArrayList<String>();
+ matcher.reset(buffer);
+ while (matcher.find() != false) {
+ String mark = matcher.group(1);
+ if (Strings.isValid(mark) != false) {
+ toReturn.add(mark);
+ }
+ }
+ return toReturn;
+ }
+
+ public boolean isValidTraceMark(String toCheck) {
+ invalidTraceMatcher.reset(toCheck);
+ return invalidTraceMatcher.matches() != true;
+ }
+
+ public Matcher getScriptTraceMarkMatcher() {
+ return scriptReqTraceMatcher;
+ }
+
+ public Matcher getCodeTraceMarkMatcher() {
+ return ofpReqTraceMatcher;
+ }
+
+ public boolean isScriptFile(File sourceFile) {
+ return sourceFile.getName().endsWith("java");
+ }
+
+ public String getCanonicalRequirementName(String requirementMark) {
+ String canonicalReqReference = requirementMark;
+ if (Strings.isValid(requirementMark) != false) {
+ canonicalReqReference = requirementMark.toUpperCase();
+
+ embeddedVolumeMatcher.reset(canonicalReqReference);
+ if (embeddedVolumeMatcher.find()) {
+ canonicalReqReference = embeddedVolumeMatcher.group(1);
+ }
+
+ nonWordMatcher.reset(canonicalReqReference);
+ canonicalReqReference = nonWordMatcher.replaceAll("");
+ }
+ return canonicalReqReference;
+ }
+
+ // [{SUBSCRIBER}.ID] and example procedure {CURSOR_ACKNOWLEDGE}.NORMAL
+ public Pair<String, String> getStructuredRequirement(String requirementMark) {
+ Pair<String, String> toReturn = null;
+ structuredRequirementMatcher.reset(requirementMark);
+ if (structuredRequirementMatcher.matches() != false) {
+ String primary = structuredRequirementMatcher.group(1);
+ String secondary = structuredRequirementMatcher.group(2);
+ if (Strings.isValid(primary) != false) {
+ toReturn = new Pair<String, String>(primary, secondary);
+ }
+ }
+ return toReturn;
+ }
+}
|