text:
package org.trianacode.taskgraph;

import org.trianacode.taskgraph.imp.TaskFactoryImp;
import org.trianacode.taskgraph.imp.TaskGraphImp;
import org.trianacode.taskgraph.imp.TaskImp;
import org.trianacode.taskgraph.imp.ToolImp;
import org.trianacode.taskgraph.proxy.ProxyFactory;
import org.trianacode.taskgraph.proxy.ProxyInstantiationException;
import org.trianacode.taskgraph.tool.Tool;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Vector;

/**
 * Utility functions useful in handling task graphs
 *
 * @author Ian Wang
 * @version $Revision: 4048 $
 */
public class TaskGraphUtils {

    /**
     * @return true if the specified task is a control task
     */
    public static boolean isControlTask(Task task) {
        if (task.getParent() == null) {
            return false;
        } else {
            return (task.getParent().getControlTask() == task);
        }
    }

    /**
     * Creates a non-runnable clone of the specfied tool.
     */
    public static Tool cloneTool(Tool tool) throws TaskException {
        if (tool instanceof TaskGraph) {
            try {
                return cloneTaskGraph((TaskGraph) tool, TaskGraphManager.NON_RUNNABLE_FACTORY_TYPE, false, false, true);
            } catch (TaskGraphException except) {
                throw (new TaskException(except));
            }
        } else {
            return toolClone(tool);
        }
    }

    /**
     * Creates a non-runnable clone of the specfied task, optionally preserving the instance id.
     */
    public static Task cloneTask(Task task, boolean preserveinst) throws TaskException {
        if (task instanceof TaskGraph) {
            try {
                return (Task) cloneTaskGraph((TaskGraph) task, TaskGraphManager.NON_RUNNABLE_FACTORY_TYPE, preserveinst,
                        false, true);
            } catch (TaskGraphException except) {
                throw (new TaskException(except));
            }
        } else {
            return taskClone(task, preserveinst);
        }
    }

    /**
     * Creates a clone of the tool. If the tool is a taskgraph then a dummy single tool is returned
     */
    public static Tool dummyCloneTool(Tool tool) throws TaskException {
        return toolClone(tool);
    }

    /**
     * Creates a clone of the task. If the task is a taskgraph then a dummy single task is returned
     */
    public static Task dummyCloneTask(Task task, boolean preserveinst) throws TaskException {
        return taskClone(task, preserveinst);
    }

    /**
     * Creates a place holder tool, which is a copy of only the nodes and tool classes of the specified tool.
     */
    public static Tool createPlaceHolderTool(Tool tool) throws TaskException {
        try {
            ToolImp placeholder = new ToolImp(tool.getProperties());
            placeholder.setToolName(tool.getToolName());
            placeholder.setDataInputNodeCount(tool.getDataInputNodeCount());
            placeholder.setDataOutputNodeCount(tool.getDataOutputNodeCount());
            placeholder.setProxy(ProxyFactory.cloneProxy(tool.getProxy()));
            placeholder.setProperties(tool.getProperties());

            RenderingHint[] hints = tool.getRenderingHints();
            for (int count = 0; count < hints.length; count++) {
                placeholder.addRenderingHint(hints[count]);
            }

            String[] names = tool.getExtensionNames();
            for (int count = 0; count < names.length; count++) {
                placeholder.addExtension(names[count], tool.getExtension(names[count]));
            }

            int paramin = tool.getParameterInputNodeCount();
            String[] paramnames = new String[paramin];
            boolean[] trigger = new boolean[paramin];

            for (int count = 0; count < paramin; count++) {
                paramnames[count] = tool.getParameterInputName(count);
                trigger[count] = tool.isParameterTriggerNode(count);
            }

            placeholder.setParameterInputs(paramnames, trigger);

            int paramout = tool.getParameterOutputNodeCount();
            paramnames = new String[paramout];

            for (int count = 0; count < paramout; count++) {
                paramnames[count] = tool.getParameterOutputName(count);
            }

            placeholder.setParameterOutputs(paramnames);

            if (tool instanceof TaskGraph) {
                return new TaskGraphImp(placeholder, new TaskFactoryImp(), false);
            } else {
                return placeholder;
            }
        } catch (NodeException except) {
            throw (new TaskException(except));
        } catch (ProxyInstantiationException except) {
            throw (new TaskException(except));
        }
    }

    /**
     * Creates a clone of the specified taskgraph within the parent, optionally preserving the instance ids of the
     * cloned task.
     */
    public static TaskGraph cloneTaskGraph(TaskGraph taskgraph, TaskGraph parent, boolean preserveinst)
            throws TaskGraphException {
        TaskGraph clone;
        String factorytype;

        if (parent != null) {
            factorytype = TaskGraphManager.getTaskGraphFactoryType(parent);
        } else {
            throw (new TaskException("Parent taskgraphs must be created using TaskGraphManager"));
        }

        if (preserveinst) {
            clone = TaskGraphUtils.cloneTaskGraph(taskgraph, factorytype);
        } else {
            clone = TaskGraphUtils.copyTaskGraph(taskgraph, factorytype);
        }

        ((Task) clone).setParent(parent);
        ((Task) clone).init();

        return clone;
    }

    /**
     * Creates a full clone of the taskgraph, preserving the instances of the clone and all the tasks within the clone.
     * Note that setParent() and init() are not called on the clone.
     */
    public static TaskGraph cloneTaskGraph(TaskGraph taskgraph, String factorytype) throws TaskGraphException {
        return cloneTaskGraph(taskgraph, factorytype, true, true, true);
    }

    /**
     * Creates a semi-clone of the taskgraph, preserving the instances of the tasks within the the clone, but not the
     * clone itself (i.e. the clone is a new taskgraph instance with the same contents). Note that the control task is
     * not cloned. Also note that setParent() and init() are not called on the clone.
     */
    public static TaskGraph semiCloneTaskGraph(TaskGraph taskgraph, String factorytype) throws TaskGraphException {
        return cloneTaskGraph(taskgraph, factorytype, false, true, false);
    }

    /**
     * Creates a copy of the taskgraph, not preserving the instance id of the clone or the tasks within the clone. Note
     * that setParent() and init() are not called on the clone.
     */
    public static TaskGraph copyTaskGraph(TaskGraph taskgraph, String factorytype) throws TaskGraphException {
        return cloneTaskGraph(taskgraph, factorytype, false, false, true);
    }

    /**
     * Creates a clone of the specified tool
     */
    private static Tool toolClone(Tool tool) throws TaskException {
        return new ToolImp(tool);
    }

    /**
     * Creates a clone of the specified tool
     */
    private static Task taskClone(Task task, boolean preserveinst) throws TaskException {
        return new TaskImp(task, new TaskFactoryImp(), preserveinst);
    }

    /**
     * Creates a clone copy of the specified taskgraph that is created using the specified taskgraph factory, optionally
     * preserving the instance id of the original taskgraph in the clone. Note that the control task for the clone is
     * attached using the default connection policy.
     *
     * @param taskgraph    the taskgraph being clones
     * @param factorytype  the taskgraph factory type used to create the clone
     * @param presclone    a flag indicating whether the instance of the taskgraph is preserved
     * @param prestasks    a flag indicating whether the instance of tasks within the taskgraph are preserved
     * @param clonecontrol a flag indicating whether the control task is cloned
     */
    private static TaskGraph cloneTaskGraph(TaskGraph taskgraph, String factorytype, boolean presclone,
                                            boolean prestasks, boolean clonecontrol) throws TaskGraphException {
        try {
            TaskGraph clone = TaskGraphManager.createTaskGraph(taskgraph, factorytype, presclone);
            if (taskgraph.getToolName() != null) {
                clone.setToolName(taskgraph.getToolName());
            }

            Task[] tasks = taskgraph.getTasks(false);

            for (int count = 0; count < tasks.length; count++) {
                clone.createTask(tasks[count], prestasks);
            }

            Cable[] cables = TaskGraphUtils.getInternalCables(tasks);
            Task task;
            Node sendnode;
            Node recnode;

            try {
                for (int count = 0; count < cables.length; count++) {
                    task = clone.getTask(taskgraph.getTask(cables[count].getSendingNode()).getToolName());

                    if (cables[count].getSendingNode().isParameterNode()) {
                        sendnode = task.getParameterOutputNode(cables[count].getSendingNode().getNodeIndex());
                    } else {
                        sendnode = task.getDataOutputNode(cables[count].getSendingNode().getNodeIndex());
                    }

                    task = clone.getTask(taskgraph.getTask(cables[count].getReceivingNode()).getToolName());

                    if (cables[count].getReceivingNode().isParameterNode()) {
                        recnode = task.getParameterInputNode(cables[count].getReceivingNode().getNodeIndex());
                    } else {
                        recnode = task.getDataInputNode(cables[count].getReceivingNode().getNodeIndex());
                    }

                    clone.connect(sendnode, recnode);
                }
            } catch (CableException e) {
                e.printStackTrace();
            }

            TaskGraph group = taskgraph;
            Node nodes[] = group.getDataInputNodes();
            Node node;
            Node clonenode;

            try {
                for (int count = 0; count < nodes.length; count++) {
                    if (taskgraph.isControlTaskConnected()) {
                        node = TaskGraphUtils.getControlNode(nodes[count]).getCable().getReceivingNode();
                    } else {
                        node = nodes[count].getParentNode();
                    }

                    if (node.isParameterNode()) {
                        clonenode = clone.getTask(taskgraph.getTask(node).getToolName())
                                .getParameterInputNode(node.getNodeIndex());
                    } else {
                        clonenode = clone.getTask(taskgraph.getTask(node).getToolName())
                                .getDataInputNode(node.getNodeIndex());
                    }

                    clone.setGroupNodeParent(clone.getDataInputNode(count), clonenode);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            nodes = group.getDataOutputNodes();

            try {
                for (int count = 0; count < nodes.length; count++) {
                    if (taskgraph.isControlTaskConnected()) {
                        node = TaskGraphUtils.getControlNode(nodes[count]).getCable().getSendingNode();
                    } else {
                        node = nodes[count].getParentNode();
                    }

                    if (node.isParameterNode()) {
                        clonenode = clone.getTask(taskgraph.getTask(node).getToolName())
                                .getParameterOutputNode(node.getNodeIndex());
                    } else {
                        clonenode = clone.getTask(taskgraph.getTask(node).getToolName())
                                .getDataOutputNode(node.getNodeIndex());
                    }

                    clone.setGroupNodeParent(clone.getDataOutputNode(count), clonenode);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            if (taskgraph.isControlTask() && clonecontrol) {
                clone.createControlTask(taskgraph.getControlTask(), prestasks);

                if (taskgraph.isControlTaskConnected()) {
                    connectControlTask(clone);
                }
            }
            TaskGraphContext context = taskgraph.getContext();
            Collection<String> keys = context.getKeys();
            for (String key : keys) {
                clone.setContextProperty(key, context.getProperty(key));
            }

            return clone;
        } catch (ClassCastException except) {
            except.printStackTrace();
            throw (new TaskGraphException("cloningError" + ": " + "NodeError", except));
        } catch (TaskGraphException except) {
            except.printStackTrace();
            throw (new TaskGraphException("cloningError" + ": " + except.getMessage(), except));
        }
    }

    /**
     * Create new tasks in the specified taskgraph taskgraph, optionally preserving the original instance ids in the new
     * tasks. Any connections between the specified tools are also created.
     *
     * @return the interfaces to the new tasks
     */
    public static Task[] createTasks(Tool[] tools, TaskGraph taskgraph, boolean preserveinst)
            throws TaskException, CableException {
        Task[] taskarray = new Task[tools.length];
        Hashtable idmap = new Hashtable();

        for (int count = 0; count < tools.length; count++) {
            taskarray[count] = taskgraph.createTask(tools[count], preserveinst);
            idmap.put(tools[count], taskarray[count]);
        }

        ArrayList tasklist = new ArrayList();
        for (int count = 0; count < tools.length; count++) {
            if (tools[count] instanceof Task) {
                tasklist.add(tools[count]);
            }
        }

        Task[] tasks = (Task[]) tasklist.toArray(new Task[tasklist.size()]);

        Cable[] cables = TaskGraphUtils.getInternalCables(tasks);
        Task sendtask;
        Task rectask;
        Node sendnode;
        Node recnode;

        for (int count = 0; count < cables.length; count++) {
            sendtask = (Task) idmap.get(cables[count].getSendingTask());
            rectask = (Task) idmap.get(cables[count].getReceivingTask());

            if (cables[count].getSendingNode().isDataNode()) {
                sendnode = sendtask.getDataOutputNode(cables[count].getSendingNode().getNodeIndex());
            } else {
                sendnode = sendtask.getParameterOutputNode(cables[count].getSendingNode().getNodeIndex());
            }

            if (cables[count].getReceivingNode().isDataNode()) {
                recnode = rectask.getDataInputNode(cables[count].getReceivingNode().getNodeIndex());
            } else {
                recnode = rectask.getParameterInputNode(cables[count].getReceivingNode().getNodeIndex());
            }

            taskgraph.connect(sendnode, recnode);
        }

        return taskarray;
    }

    /**
     * Replaces a current task with a new tool (instance id is preserved)
     */
    public static Task replaceTask(Task curtask, Tool newtool, boolean rename) throws TaskGraphException {
        return replaceTask(curtask, newtool, rename, true);
    }

    /**
     * Replaces a current task with a new tool.
     * <p/>
     * Note that newtool is a task with no parent it is automatically disposed after the replacement task has been
     * created.
     *
     * @param curtask      the task being replaced
     * @param newtool      the tool used to replace the existing task
     * @param rename       true if the new task should take the same name as the existing task
     * @param preserveinst true if the new task should preseve the instance id of newtool
     */
    public static Task replaceTask(Task curtask, Tool newtool, boolean rename, boolean preserveinst)
            throws TaskGraphException {
        if (curtask.getParent() == null) {
            throw (new RuntimeException("Error replacing task: Task being replaced does not have a parent taskgraph"));
        }

        TaskGraph parent = curtask.getParent();
        boolean reconnectcontrol = false;
        String taskname = curtask.getToolName();

        rename = rename || (newtool.getToolName() == curtask.getToolName());

        if (parent != null) {
            if (parent.isControlTaskConnected()) {
                TaskGraphUtils.disconnectControlTask(parent);
                reconnectcontrol = true;
            }

            Node[] sendnodes = curtask.getInputNodes();
            Node[] childinnodes = new Node[sendnodes.length];

            for (int count = 0; count < sendnodes.length; count++) {
                if (sendnodes[count].getChildNode() != null) {
                    childinnodes[count] = (Node) sendnodes[count].getChildNode();
                    ((Node) sendnodes[count]).setChildNode(null);
                }

                if (sendnodes[count].isConnected()) {
                    sendnodes[count] = sendnodes[count].getCable().getSendingNode();
                } else {
                    sendnodes[count] = null;
                }
            }

            Node[] recnodes = curtask.getOutputNodes();
            Node[] childoutnodes = new Node[recnodes.length];

            for (int count = 0; count < recnodes.length; count++) {
                if (recnodes[count].getChildNode() != null) {
                    childoutnodes[count] = (Node) recnodes[count].getChildNode();
                    ((Node) recnodes[count]).setChildNode(null);
                }

                if (recnodes[count].isConnected()) {
                    recnodes[count] = recnodes[count].getCable().getReceivingNode();
                } else {
                    recnodes[count] = null;
                }
            }

            Task newtask = parent.createTask(newtool, preserveinst);

            if (!(newtask instanceof TaskGraph)) {
                while (newtask.getDataInputNodeCount() < curtask.getDataInputNodeCount()) {
                    newtask.addDataInputNode();
                }

                while (newtask.getDataInputNodeCount() > curtask.getDataInputNodeCount()) {
                    newtask.removeDataInputNode(newtask.getDataInputNode(newtask.getDataInputNodeCount() - 1));
                }

                while (newtask.getDataOutputNodeCount() < curtask.getDataOutputNodeCount()) {
                    newtask.addDataOutputNode();
                }

                while (newtask.getDataOutputNodeCount() > curtask.getDataOutputNodeCount()) {
                    newtask.removeDataOutputNode(newtask.getDataOutputNode(newtask.getDataOutputNodeCount() - 1));
                }

                while (newtask.getParameterInputNodeCount() > 0) {
                    newtask.removeParameterInputNode(newtask.getParameterInputNode(0));
                }

                for (int count = 0; count < curtask.getParameterInputNodeCount(); count++) {
                    newtask.addParameterInputNode(curtask.getParameterInputName(count));
                }

                while (newtask.getParameterOutputNodeCount() > 0) {
                    newtask.removeParameterOutputNode(newtask.getParameterOutputNode(0));
                }

                for (int count = 0; count < curtask.getParameterOutputNodeCount(); count++) {
                    newtask.addParameterOutputNode(curtask.getParameterOutputName(count));
                }
            }

            Node[] innodes = newtask.getInputNodes();

            for (int count = 0; (count < childinnodes.length); count++) {
                if (childinnodes[count] != null) {
                    if (count < innodes.length) {
                        childinnodes[count].setParentNode((Node) innodes[count]);
                        ((Node) innodes[count]).setChildNode(childinnodes[count]);
                    } else {
                        childinnodes[count].setParentNode(null);
                    }
                }
            }

            Node[] outnodes = newtask.getOutputNodes();

            for (int count = 0; (count < childoutnodes.length); count++) {
                if (childoutnodes[count] != null) {
                    if (count < outnodes.length) {
                        childoutnodes[count].setParentNode((Node) outnodes[count]);
                        ((Node) outnodes[count]).setChildNode(childoutnodes[count]);
                    } else {
                        childoutnodes[count].setParentNode(null);
                    }
                }
            }

            for (int count = 0; (count < innodes.length) && (count < sendnodes.length); count++) {
                if (sendnodes[count] != null) {
                    parent.connect(sendnodes[count], innodes[count].getBottomLevelNode());
                }
            }

            for (int count = 0; (count < outnodes.length) && (count < recnodes.length); count++) {
                if (recnodes[count] != null) {
                    parent.connect(outnodes[count].getBottomLevelNode(), recnodes[count]);
                }
            }

            if (reconnectcontrol) {
                TaskGraphUtils.connectControlTask(parent);
            }

            parent.removeTask(curtask);

            if (rename) {
                newtask.setToolName(taskname);
            }

            if ((newtool != curtask) && (newtool instanceof Task) && (((Task) newtool).getParent() == null)) {
                TaskGraphUtils.disposeTool(newtool);
            }

            return newtask;
        } else {
            throw (new RuntimeException("Cannot recreate top-level parent taskgraph"));
        }
    }

    /**
     * Disposes of the specified tool if no longer required
     */
    public static void disposeTool(Tool tool) {
        if (tool instanceof Task) {
            Task disposetask = (Task) tool;

            if (disposetask.getParent() != null) {
                disposetask.getParent().removeTask(disposetask);
            } else {
                disposetask.dispose();
            }
        }
    }

    /**
     * @return an array of the cables connected to the specified task
     */
    public static Cable[] getConnectedCables(Task task) {
        ArrayList list = new ArrayList(100);
        Node[] nodes;

        nodes = task.getDataInputNodes();

        for (int count = 0; count < nodes.length; count++) {
            if ((nodes[count].isConnected()) && (!list.contains(nodes[count].getCable()))) {
                list.add(nodes[count].getCable());
            }
        }

        nodes = task.getDataOutputNodes();

        for (int count = 0; count < nodes.length; count++) {
            if ((nodes[count].isConnected()) && (!list.contains(nodes[count].getCable()))) {
                list.add(nodes[count].getCable());
            }
        }

        nodes = task.getParameterInputNodes();

        for (int count = 0; count < nodes.length; count++) {
            if ((nodes[count].isConnected()) && (!list.contains(nodes[count].getCable()))) {
                list.add(nodes[count].getCable());
            }
        }

        nodes = task.getParameterOutputNodes();

        for (int count = 0; count < nodes.length; count++) {
            if ((nodes[count].isConnected()) && (!list.contains(nodes[count].getCable()))) {
                list.add(nodes[count].getCable());
            }
        }

        return getCableArray(list.toArray());
    }

    /**
     * @return an array of the cables connected to the specified tasks (internal and external)
     */
    public static Cable[] getConnectedCables(Task[] tasklist) {
        ArrayList list = new ArrayList(100);
        Cable[] cables;

        for (int count1 = 0; count1 < tasklist.length; count1++) {
            cables = getConnectedCables(tasklist[count1]);

            for (int count2 = 0; count2 < cables.length; count2++) {
                if (!list.contains(cables[count2])) {
                    list.add(cables[count2]);
                }
            }
        }

        return getCableArray(list.toArray());
    }

    /**
     * @return true if a given cable is connected to a given task
     */
    public static boolean isConnectedCable(Cable cable, Task task) {
        Cable[] cables = getConnectedCables(task);
        boolean flag = false;

        for (int count = 0; (count < cables.length) && (!flag); count++) {
            flag = (cables[count] == cable);
        }

        return true;
    }

    /**
     * Checks if a cable is connected to any task in an array of tasks
     */
    public static boolean isConnectedCable(Cable cable, Task[] tasklist) {
        Cable[] cables = getConnectedCables(tasklist);
        boolean flag = false;

        for (int count = 0; (count < cables.length) && (!flag); count++) {
            flag = (cables[count] == cable);
        }

        return true;
    }

    /**
     * @return the set of cables that are internal to a given set of tasks, i.e. only cables that connect two tasks in
     *         the input set.
     */
    public static Cable[] getInternalCables(Task[] tasklist) {
        ArrayList list = new ArrayList(10);
        Cable[] cables;

        for (int count1 = 0; count1 < tasklist.length; count1++) {
            cables = getConnectedCables(tasklist[count1]);

            for (int count2 = 0; count2 < cables.length; count2++) {
                for (int count3 = 0; count3 < tasklist.length; count3++) {
                    if ((cables[count2].connects(tasklist[count3])) &&
                            (tasklist[count3] != tasklist[count1]) &&
                            (!list.contains(cables[count2]))) {
                        list.add(cables[count2]);
                    }
                }
            }
        }

        return getCableArray(list.toArray());
    }

    /**
     * Checks to see if a given cable is internal to a set of tasks, i.e. it connects two of the given tasks.
     */
    public static boolean isInternalCable(Cable cable, Task[] tasklist) {
        Cable[] cables = getInternalCables(tasklist);
        boolean flag = false;

        for (int count = 0; (count < cables.length) && (!flag); count++) {
            flag = (cables[count] == cable);
        }

        return true;
    }

    /**
     * @return the set of cables that are external to a given set of tasks, i.e. only cables that connect a task in the
     *         input set with one outside.
     */
    public static Cable[] getExternalCables(Task[] tasklist) {
        ArrayList list = new ArrayList(10);
        Cable[] cables;
        boolean flag;

        for (int count1 = 0; count1 < tasklist.length; count1++) {
            cables = getConnectedCables(tasklist[count1]);

            for (int count2 = 0; count2 < cables.length; count2++) {
                flag = true;

                for (int count3 = 0; count3 < tasklist.length; count3++) {
                    if (cables[count2].connects(tasklist[count3]) && (tasklist[count3] != tasklist[count1])) {
                        flag = false;
                    }
                }

                if ((flag) && (!list.contains(cables[count2]))) {
                    list.add(cables[count2]);
                }
            }
        }

        return getCableArray(list.toArray());
    }

    /**
     * Checks to see if a given cable is external to a set of tasks, i.e. it connects a task in the input set with one
     * outside.
     */
    public static boolean isExternalCable(Cable cable, Task[] tasklist) {
        Cable[] cables = getExternalCables(tasklist);
        boolean flag = false;

        for (int count = 0; (count < cables.length) && (!flag); count++) {
            flag = (cables[count] == cable);
        }

        return true;
    }

    private static Cable[] getCableArray(Object[] master) {
        Cable[] copy = new Cable[master.length];

        for (int count = 0; count < master.length; count++) {
            copy[count] = (Cable) master[count];
        }

        return copy;
    }

    /**
     * @return all the tasks that preceed the specified task
     */
    public static Task[] getInputTasks(Task task) {
        Node[] nodes = task.getInputNodes();
        ArrayList tasks = new ArrayList();

        for (int count = 0; count < nodes.length; count++) {
            if (nodes[count].getCable() != null) {
                tasks.add(nodes[count].getCable().getSendingTask());
            }
        }

        return (Task[]) tasks.toArray(new Task[tasks.size()]);
    }

    /**
     * @return all the tasks that follow the specified task
     */
    public static Task[] getOutputTasks(Task task) {
        Node[] nodes = task.getOutputNodes();
        ArrayList tasks = new ArrayList();

        for (int count = 0; count < nodes.length; count++) {
            if (nodes[count].getCable() != null) {
                tasks.add(nodes[count].getCable().getReceivingTask());
            }
        }

        return (Task[]) tasks.toArray(new Task[tasks.size()]);
    }

    /**
     * @return all the tasks that are connected to the specified task
     */
    public static Task[] getConnectedTasks(Task task) {
        Node[] nodes = task.getInputNodes();
        ArrayList tasks = new ArrayList();

        for (int count = 0; count < nodes.length; count++) {
            if (nodes[count].getCable() != null) {
                tasks.add(nodes[count].getCable().getSendingTask());
            }
        }

        nodes = task.getOutputNodes();

        for (int count = 0; count < nodes.length; count++) {
            if (nodes[count].getCable() != null) {
                tasks.add(nodes[count].getCable().getReceivingTask());
            }
        }

        return (Task[]) tasks.toArray(new Task[tasks.size()]);
    }

    /**
     * @return the remaining workflow that follows the specified task, optionally including the original task at index
     *         0.
     */
    public static Task[] getRemainingWorkflow(Task task, boolean include) {
        ArrayList tasks = new ArrayList();
        Task temptask;
        Task[] conntasks;
        boolean done = false;
        int ptr = 0;

        if (include) {
            tasks.add(task);
            ptr++;
        }

        conntasks = getOutputTasks(task);

        for (int count = 0; count < conntasks.length; count++) {
            tasks.add(conntasks[count]);
        }

        while (ptr < tasks.size()) {
            temptask = (Task) tasks.get(ptr++);

            conntasks = getConnectedTasks(temptask);

            for (int count = 0; count < conntasks.length; count++) {
                if (!tasks.contains(conntasks[count])) {
                    tasks.add(conntasks[count]);
                }
            }
        }

        return (Task[]) tasks.toArray(new Task[tasks.size()]);
    }

    /**
     * Sets up the connections for the loop task. Input/output from the group now goes via the loop task.
     */
    public static void connectControlTask(TaskGraph taskgraph) throws TaskGraphException {
        if (taskgraph.getControlTask() == null) {
            return;
        }

        taskgraph.setControlTaskState(TaskGraph.CONTROL_TASK_UNSTABLE);

        Task contask = taskgraph.getControlTask();

        while (contask.getDataInputNodeCount() > 0) {
            contask.removeDataInputNode(contask.getDataInputNode(0));
        }

        while (contask.getDataOutputNodeCount() > 0) {
            contask.removeDataOutputNode(contask.getDataOutputNode(0));
        }

        TaskGraph grouptask = taskgraph;
        Node loopnode;
        Node groupnode;
        Node[] innodes = grouptask.getDataInputNodes();
        Node[] inconnodes = new Node[innodes.length];

        for (int nodecount = 0; nodecount < innodes.length; nodecount++) {
            inconnodes[nodecount] = innodes[nodecount].getParentNode();
            groupnode = (Node) innodes[nodecount];
            loopnode = (Node) contask.addDataInputNode();

            grouptask.setGroupNodeParent(groupnode, loopnode);
        }

        Node[] outnodes = grouptask.getDataOutputNodes();
        Node[] outconnodes = new Node[outnodes.length];

        for (int nodecount = 0; nodecount < outnodes.length; nodecount++) {
            outconnodes[nodecount] = outnodes[nodecount].getParentNode();
            groupnode = (Node) grouptask.getDataOutputNode(nodecount);
            loopnode = (Node) contask.addDataOutputNode();

            grouptask.setGroupNodeParent(groupnode, loopnode);
        }

        for (int nodecount = 0; nodecount < innodes.length; nodecount++) {
            taskgraph.connect(contask.addDataOutputNode(), inconnodes[nodecount]);
        }

        for (int nodecount = 0; nodecount < outnodes.length; nodecount++) {
            taskgraph.connect(outconnodes[nodecount], contask.addDataInputNode());
        }

        taskgraph.setControlTaskState(TaskGraph.CONTROL_TASK_CONNECTED);
    }

    /**
     * Removes the connections for the loop task.
     */
    public static void disconnectControlTask(TaskGraph taskgraph) throws TaskGraphException {
        if (!taskgraph.isControlTaskConnected()) {
            return;
        }

        taskgraph.setControlTaskState(TaskGraph.CONTROL_TASK_UNSTABLE);

        Task contask = taskgraph.getControlTask();
        TaskGraph grouptask = taskgraph;
        Node[] groupnodes;
        Node[] connodes;
        Node groupnode;
        Node recnode;
        Node sendnode;
        Cable cable;

        groupnodes = grouptask.getDataInputNodes();
        connodes = contask.getDataOutputNodes();
        int outcount = grouptask.getDataOutputNodeCount();

        for (int count = 0; count < groupnodes.length; count++) {
            cable = connodes[count + outcount].getCable();

            recnode = (Node) cable.getReceivingNode();
            groupnode = (Node) grouptask.getDataInputNode(count);

            taskgraph.disconnect(cable);

            groupnode.setParentNode(recnode);
            recnode.setChildNode(groupnode);
            ((Node) contask.getDataInputNode(count)).setChildNode(null);
        }

        groupnodes = grouptask.getDataOutputNodes();
        connodes = contask.getDataInputNodes();
        int incount = grouptask.getDataInputNodeCount();

        for (int count = 0; count < groupnodes.length; count++) {
            cable = connodes[count + incount].getCable();

            sendnode = (Node) cable.getSendingNode();
            groupnode = (Node) grouptask.getDataOutputNode(count);

            taskgraph.disconnect(cable);

            groupnode.setParentNode(sendnode);
            sendnode.setChildNode(groupnode);
            ((Node) contask.getDataOutputNode(count)).setChildNode(null);
        }

        while (contask.getDataInputNodeCount() > 0) {
            contask.removeDataInputNode(contask.getDataInputNode(0));
        }

        while (contask.getDataOutputNodeCount() > 0) {
            contask.removeDataOutputNode(contask.getDataOutputNode(0));
        }

        taskgraph.setControlTaskState(TaskGraph.CONTROL_TASK_DISCONNECTED);
    }

    /**
     * Given a group input node returns the opposite node on the control task
     */
    private static Node getControlNode(Node groupnode) {
        Task controltask = groupnode.getTopLevelTask();

        if (groupnode.isInputNode()) {
            return controltask
                    .getDataOutputNode(groupnode.getNodeIndex() + groupnode.getTask().getDataOutputNodeCount());
        } else {
            return controltask.getDataInputNode(groupnode.getNodeIndex() + groupnode.getTask().getDataInputNodeCount());
        }
    }

    /**
     * @return the ultimate source node that sends data to/receives data from the given node (ignoring control tasks).
     *         Null if not connected.
     */
    public static Node getSourceNode(Node node) {
        Task task;
        boolean bottom = false;

        while (!bottom) {
            node = node.getBottomLevelNode();

            if (node.isConnected()) {
                if (node.isInputNode()) {
                    node = node.getCable().getSendingNode();
                } else {
                    node = node.getCable().getReceivingNode();
                }

                task = node.getTask();

                if ((task.getParent() != null) && (task.getParent().getControlTask() == task)) {
                    if (node.isInputNode()) {
                        node = task.getDataOutputNode(node.getNodeIndex() - task.getParent().getDataInputNodeCount());
                    } else {
                        node = task.getDataInputNode(node.getNodeIndex() - task.getParent().getDataOutputNodeCount());
                    }
                } else {
                    bottom = true;
                }
            } else {
                return null;
            }
        }

        return NodeUtils.getTopLevelNode(node);
    }

    /**
     * @return a count of all the tasks within a taskgraph and its sub taskgraphs (optionally including control tasks)
     */
    public static int getAllTasksCount(TaskGraph taskGraph, boolean includecontrol) {
        Task[] tasks = taskGraph.getTasks(includecontrol);
        int taskcount = 0;

        for (int count = 0; count < tasks.length; count++) {
            if (tasks[count] instanceof TaskGraph) {
                taskcount += getAllTasksCount((TaskGraph) tasks[count], includecontrol) + 1;
            } else {
                taskcount++;
            }
        }

        return taskcount;
    }

    /**
     * @return an array of all tasks within a taskgraph and its sub taskgraphs, optionally including control tasks
     */
    public static Task[] getAllTasksRecursive(TaskGraph taskGraph, boolean includecontrol) {
        Vector copy = new Vector();

        getAllTasksRecursive(taskGraph, copy, includecontrol);

        return (Task[]) copy.toArray(new Task[copy.size()]);
    }

    /**
     * Recursively copy all the non-group tasks into the vector
     */
    public static void getAllTasksRecursive(TaskGraph taskGraph, Vector copy, boolean includecontrol) {
        Task[] tasks = taskGraph.getTasks(includecontrol);

        for (int i = 0; i < tasks.length; i++) {
            if (tasks[i] instanceof TaskGraph) {
                getAllTasksRecursive((TaskGraph) tasks[i], copy, includecontrol);
            } else {
                copy.add(tasks[i]);
            }
        }
    }

    /**
     * @return all the data types input by the nodes on the specified tool.
     */
    public static String[] getAllDataInputTypes(Tool tool) {
        ArrayList typelist = new ArrayList();
        String[] types = tool.getDataInputTypes(0);
        int count = 0;

        while (types != null) {
            for (int tcount = 0; tcount < types.length; tcount++) {
                if (!typelist.contains(types[tcount])) {
                    typelist.add(types[tcount]);
                }
            }

            types = tool.getDataInputTypes(++count);
        }

        return (String[]) typelist.toArray(new String[typelist.size()]);
    }

    /**
     * @return all the data types input by the nodes on the specified tool.
     */
    public static String[] getAllDataOutputTypes(Tool tool) {
        ArrayList typelist = new ArrayList();
        String[] types = tool.getDataOutputTypes(0);
        int count = 0;

        while (types != null) {
            for (int tcount = 0; tcount < types.length; tcount++) {
                if (!typelist.contains(types[tcount])) {
                    typelist.add(types[tcount]);
                }
            }

            types = tool.getDataOutputTypes(++count);
        }

        return (String[]) typelist.toArray(new String[typelist.size()]);
    }

    public static java.util.List<Task> getSuccessors(Task t) {
        java.util.List<Task> ret = new ArrayList<Task>();
        int count = t.getOutputNodeCount();
        for (int i = 0; i < count; i++) {
            Node node = t.getOutputNode(i);
            if (node.isConnected()) {
                ret.add(node.getCable().getReceivingTask());
            }
        }
        return ret;
    }

    public static java.util.List<Task> getPredecessors(Task t) {
        java.util.List<Task> ret = new ArrayList<Task>();

        int count = t.getInputNodeCount();
        for (int i = 0; i < count; i++) {
            Node node = t.getInputNode(i);
            if (node.isConnected()) {
                ret.add(node.getCable().getSendingTask());
            }
        }
        return ret;
    }

    public static java.util.List<Task> getLeafTasks(TaskGraph taskgraph) {
        Task[] tasks = taskgraph.getTasks(false);
        Node[] outnodes;
        ArrayList endtasks = new ArrayList();
        boolean endtask;

        for (int count = 0; count < tasks.length; count++) {
            outnodes = tasks[count].getDataOutputNodes();
            endtask = true;

            for (int nodecount = 0; (nodecount < outnodes.length) && endtask; nodecount++) {
                if (outnodes[nodecount].isConnected()) {
                    endtask = false;
                }
            }

            if (endtask) {
                endtasks.add(tasks[count]);
            }
        }
        return endtasks;
    }

    public static java.util.List<Task> getRootTasks(TaskGraph taskgraph) {
        Task[] tasks = taskgraph.getTasks(false);
        Node[] innodes;
        ArrayList endtasks = new ArrayList();
        boolean starttask;

        for (int count = 0; count < tasks.length; count++) {
            innodes = tasks[count].getDataInputNodes();
            starttask = true;

            for (int nodecount = 0; (nodecount < innodes.length) && starttask; nodecount++) {
                if (innodes[nodecount].isConnected()) {
                    starttask = false;
                }
            }

            if (starttask) {
                endtasks.add(tasks[count]);
            }
        }
        return endtasks;
    }

}

redpajama_set_name: RedPajamaGithub


text:
Public Administration and Regional Development
Process of peer-review
Open-access Statement
Indexing the Journal
Article Sample
The authors who publish in this journal agree with the following terms:
1. The authors reserve the right to authorship of their work and submit to the journal the right of first publication of this work, which automatically becomes available under the terms of the Creative Commons Attribution License, which allows other persons freely to distribute the published work with the obligatory reference to authors of the original work and the first publication of work in this journal.
2. The authors are able to enter into separate, additional contractual arrangements for the non-exclusive distribution of the journal's published version of the work (e.g., post it to an institutional repository or publish it in a book), with an acknowledgement of its initial publication in this journal.
3. The authors are permitted and encouraged to post their work online (e.g., in institutional repositories or on their website) prior to and during the submission process, as it can lead to productive exchanges, as well as earlier and greater citation of published work.
Review of the scientific article
Open Science in Ukraine - site development for scientific journals.
Creative Commons «Attribution» 4.0 WorldWide.

redpajama_set_name: RedPajamaCommonCrawl


The Evangelists Committee is encouraged by the continued progress that God is producing in our worldwide fellowship of churches. More souls are being saved and our geographic regions are getting stronger, healthier, and more functionally dynamic. The American churches just completed their first American Leadership Conference hosted by the Boston Church. The ALC was a tremendous success, addressing the growth needs of our churches through workshops broken down by size. Douglas Arthur and the entire Boston leadership are to be commended for this inspirational conference.
The committee is also encouraged by the response to our upcoming 2012 World Discipleship Summit in San Antonio, Texas July 5-8, 2012. Already over 3300 have registered. The Summit will host 8 conferences going on at the same time. Each evening we will all come together for worship services of over 10,000. These will be the largest worship services in the history of our fellowship.
The development for a unified curriculum has made great progress in the last several months. We have developed a consensus among the Evangelists, Elders and Teachers service teams to pursue a course of action that will develop a program that can be implemented around the world in the training of our ministry staff. The proposal is before the Delegates for their approval in Budapest this December. Perhaps the most exciting development is the formation of a Board of Development that would be comprised of representatives from the Elders, Teachers and Evangelist groups; this Board will help us shape the concepts and oversee the development of the curriculum.
During our last few meetings with the Delegates, we taught and disseminated information to everyone on the Best Practices of a Healthy Region that we felt were taking place in our fellowship. We are encouraging and helping regional families of churches around the world to develop and publish their own 2020 Vision. We also encouraged the collection of some statistics on an annual basis, relating to church growth. Last year, a collective attempt was made for the first time and they were sent to Roger Lamb, Chair of the Communication & Administration Team for consolidation. These numbers were given out to all members of the Evangelist Committee when they met earlier in 2011. Discussions took place informally among themselves on the progress of the churches in their regions. We hope that this trend will continue and that churches and regions that are healthy will be able to continue to help others that have been experiencing road blocks, such as increasing in growth and unity. For this reason the global Delegates Conference for 2011 is being held in Budapest to provide inspiration and encouragement to the churches in Europe.
The 2011 Delegate Meeting in Budapest promises to be our most productive yet. We will study these lesson topics together: (1) Vision & Faith, (2) Unity, (3) Mission, and (4) Discipling. We will not only be able to have great fellowship and vote on the proposals, but we will also have a time for our group of Delegates to be in the creation of direction, and ideas. In a constructive way, this plan expands our tank of ideas and cultural and global experiences. Also our perspectives grow from a group of 17 to a group of 100. This changes the dynamic from Delegates just coming together to be "informed", to our actually working together. We will seek God's guidance in 6 areas where many people feel there needs to be global collaboration. Everyone will be able to participate and provide insight, ideas, and convictions for the various topics. We believe that will be a great opportunity for the Spirit to work in an amazing way!
to access the opportunities and resources we have on a global scale to fulfill our mission.
to evaluate our efficiency and organization in accomplishing God's mission around the world.


text:
Home / Aaron Pearce / English Lyrics / Island / Justin Bieber Song Lyrics / RBMG / Schoolboy / Tricky Stewart / Under The Mistletoe (2011) / Santa Claus Is Coming To Town Lyrics - Justin Bieber
Santa Claus Is Coming To Town Lyrics - Justin Bieber
Aaron Pearce, English Lyrics, Island, Justin Bieber Song Lyrics, RBMG, Schoolboy, Tricky Stewart, Under The Mistletoe (2011)
Santa Claus Is Coming To Town Lyrics - Justin Bieber is a most popular English song. Song of Santa Claus Is Coming To Town lyrics started by the line in English pronunciation is Santa's coming girl. This song released on the date of 1st November, 2011. Song of Santa Claus Is Coming To Town lyrics sung by Justin Bieber. This song written by John Frederick Coots, Haven Gillespie, Alphonso Mizell, Berry Gordy, Deke Richards & Freddie Perren. Song of Santa Claus Is Coming To Town lyrics got more than 79 million visitor in YouTube after released this song. This song music composition by Tricky Stewart & Aaron Pearce. Santa Claus Is Coming To Town song Background vocals sung by Kuk Harrell & Bryan Jackson.
Santa Claus Is Coming To Town Song got a music label which name is Island, RBMG & Schoolboy. This song sung in the language of English. Santa Claus Is Coming To Town song first published on the YouTube in the channel of Justin Bieber. This song created in an album which name is Under The Mistletoe (2011). So, let's know the song of Santa Claus Is Coming To Town Song lyrics and also play the music video in below.
Santa Claus Is Coming To Town Song Information
John Frederick Coots, Haven Gillespie, Alphonso Mizell, Berry Gordy, Deke Richards & Freddie Perren
Tricky Stewart & Aaron Pearce
Under The Mistletoe (2011)
Island, RBMG & Schoolboy
Kuk Harrell & Bryan Jackson
You can also know The Christmas Song (Chestnuts Roasting On An Open Fire) and Dolls song lyrics.
Santa's coming girl
He's checking it twice
He's gonna find out
Who's naughty and nice
He knows when you've been bad or good
So it's that time of the year
When you let all your problems go
And you know you just
Shake it shake it baby
Ooooh
Santa Claus is coming
Onubhuti Lyrics ( অনুভুতি ) - Charpoka
Valobese Sokhi Lyrics ( ভালোবেসে সখী ) - Rabindra Sangeet
Jodi Himaloy Hoye Lyrics ( যদি হিমালয় হয়ে ) - Khalid
Ghum Lyrics ( ঘুম ) - Odd Signature
Shey Amare Lyrics ( সে আমারে ) - Ashes


text:
Michael T Keene
- SHOW NOTES
TALKING HART ISLAND PODCAST EPISODE 23
Episode 23 "Leo Birinski": with Barbara Kosta,
Professor, University of Arizona.
For a man with a little known history, no legitimate records to prove his place of birth, or even his date of birth, and who would eventually be buried in a mass grave on Hart Island, Leo Birinski became a known playwright, , screenwriter, and film director.
Perhaps the best measure of a man is his work and for Birinski that included the German silent film masterpieces, "Waxworks" and "Tragedy of Love".
Join us as Professor Kosta, head of the Department of German Studies at the University of Arizona and affiliated member of Gender and Women's Studies in Film, as she explores Birinski's career and the film legend, Marlene Dietrich.
Copyright © Michael T. Keene | Web Hosting by Web Samurai


text:
Fentanyl: A Rising Epidemic
Opioid Crisis Concept: High angle view of a prescription bottled filled with pills surrounded by more of the same tablets.
Lily Atwell, Sophia Brown, Lily Nuccio, and Teagan Tulley
Introduction: What is Fentanyl?
In Americans 18-45, Fentanyl is the number one cause of death. Although it is tasteless, odorless and colorless, this deadly powder is being laced with opioids and killing well over 700 people a year in Colorado alone. The equivalent of four grains of salt could kill a person, yet the simplest countermeasures could save them. These action steps could just be the key to harm reduction in this circumstance.
The effects of fentanyl are very deadly even with the tiniest amount. It is known to be one of the deadliest drugs in the U.S. When you take fentanyl or just touch it, it can change your heartbeat and can cause hallucinations. "Fentanyl produces effects such as relaxation, euphoria, pain relief, sedation, confusion, drowsiness, dizziness, nausea, vomiting, urinary retention, pupillary constriction, and respiratory depression" . There are very few who overdose on fentanyl and survive. If someone does end up surviving after an overdose there still could be lasting effects on your physical and mental health.
Countermeasures and Prevention
Preventing the use of drugs is a difficult task at times. It seems as if there is no other solution to the issue. There are many countermeasures that are able to give innovative and non-harmful solutions to the problem at hand. It is understandable that it will be a difficult and long task to recover. There are other ways to prevent drug overdose other than simply asking someone to "say no".
The use of Fentanyl test strips come in handy when making sure users are able to stay safe. They detect whether or not Fentanyl is present in any powdered substance or urine sample. Take a look at these perspectives on rapid fentanyl test strips as a harm reduction practice among young adults who use drugs: a qualitative study. By using these strips people are able to stay safe without having to risk their lives for the chance of laced Fentanyl. Denver has many places that are able to ship test strips at no cost at all to ensure that you are practicing safety, and you can visit safe locations like the Harm Reduction Action Center. There are many similar safe-needle exchanges in Denver to make sure that people are using clean needles and disposing of their dirty ones properly. They provide test strips and other free accommodations to make sure that if people use drugs, they are using them safely. Most pharmacies also sell test strips and Narcan for a low price.
Another useful solution is Narcan, also referred to as naloxone. If there is any emergency where there has been an accidental overdose, you use Narcan as a nasal spray to contract the substance out of the victim's nose. A study from Massachusetts has shown that there is a 93.5% of people who survive overdose when given Narcan. For more information read this article from CNN. Narcan is a safe and effective resource if the safety of others is in serious question. Both fentanyl test strips and Narcan are okay to carry. Don't be embarrassed for wanting to keep the people you care about safe. Having a solution to harm caused by drug use is a great thing to carry if needed. You never know when you can save a life.
On the Continuum of Care from the Opioid Response Network, these countermeasures fall under harm reduction. Treatment for those who are actively using drugs can be difficult, and isn't always an immediate option. Harm reduction is an important middle road to ensuring that people with substance use disorders (SUDs) can survive drug use and potentially recover. While taking opioids is still a high risk activity, test strips and Narcan can significantly lower the probability of death. Other resources are available to make drug use as safe as possible, such as sterile needles.
Destigmatization
Stigmas about SUDs run rampant in our society. People often believe that people with SUDs are dangerous, or unable to recover. This makes individuals that are using opioids less likely to seek treatment, and causes a greater divide between the individuals and the general population. One of the social steps involved in the harm reduction process is destigmatizing discussions around SUDs, so people feel safer seeking treatment. Simply having conversations about opioids and fentanyl can begin this process, but it's important to use correct and neutral terms.
Person-first language separates a person with an SUD from their drug use, and prevents dehumanization that could further alienate them from harm reduction and treatment programs. For example, instead of mentioning "addicts," "users," "abusers," or even "reformed addicts," use language like "person with a substance abuse disorder,"or "person in long term recovery." Instead of using terms like "clean" and "dirty" to refer to drug usage, again try words like "in remission" and "person who uses drugs." To learn more about sensitive language when discussing drugs and alcohol, see The National Institute on Drug Abuse.
Destigmatizing opioid use is an important step in harm reduction for people with SUDs, but it's also vital in making sure that everyone, regardless of if they use drugs or not, feels comfortable carrying fentanyl test strips and Narcan. Starting conversations with conscious language could save lives.
Opioids are nothing new, But the way everyday citizens handle them could be revolutionary. Carrying test strips and Narcan, understanding the effects of fentanyl and starting conversations around SUDs could be a new epidemic in the United States, one that could save thousands of lives from a deadly substance.
Lily Atwell: Graphic Consultation, Research
Sophia Brown: Writing, Research
Lily Nuccio: Writing, Research
Teagan Tulley: Graphic Design, Writing, Research
Abuse, National Institute on Drug. "Words Matter – Terms to Use and Avoid When Talking about Addiction." National Institute on Drug Abuse, 29 Nov. 2021, nida.nih.gov/nidamed-medical-health-professionals/health-professions-education/words-matter-terms-to-use-avoid-when-talking-about-addiction. Accessed 2 May 2022.
Goldman, Jacqueline E., et al. "Perspectives on Rapid Fentanyl Test Strips as a Harm Reduction Practice among Young Adults Who Use Drugs: A Qualitative Study." Harm Reduction Journal, vol. 16, no. 1, 8 Jan. 2019, 10.1186/s12954-018-0276-0.
"Harm Reduction Action Center." Harm Reduction Action Center, www.harmreductionactioncenter.org/. Accessed 2 May 2022.
Kounang, Nadia. "Naloxone Reverses 93% of Overdoses, but Many Recipients Don't Survive a Year." CNN, 30 Oct. 2017, www.cnn.com/2017/10/30/health/naloxone-reversal-success-study/index.html. Accessed 2 May 2022.
"Opioid Response Network." Opioidresponsenetwork.org, 2019, opioidresponsenetwork.org/. Accessed 4 May 2022.
"Surgeon General: Destigmatizing Addiction Will Help Combat Opioid Epidemic." Www.ishn.com, www.ishn.com/articles/109410-surgeon-general-destigmatizing-addiction-will-help-combat-opioid-epidemic. Accessed 4 May 2022.
United States Drug Enforcement Administration. "Fentanyl." Dea.gov, 2000, www.dea.gov/factsheets/fentanyl. Accessed 2 May 2022.
What's the best part of the holidays?
No school (40%, 2 Votes)
Gifts (20%, 1 Votes)
Food (20%, 1 Votes)
The general holiday spirit (20%, 1 Votes)
Seeing family (0%, 0 Votes)
A Transition of Power
Poll Workers: The New Generation
Northfield High School Video Announcements
2020: Wildest Year in Human History?
Momentum:
Tribute to 2019-2020 Northfield High School Boys Varsity Basketball Team
Does Harvard really care about all their students?
Northfield Student Fights to End Puppy Mills in Colorado
Chicago Teacher Strike
NIGHT VISION: Northfield High School Video Journalism
All The Daily Nighthawk Picks Reader Picks Sort: Newest


Please tell us which color you need after you pay. If not we will send Black color, thank you so much!
2. Orders processed within 24-72hours of payment verification.
Want to experience male chastity husband? If so, come to DHgate.com which can offer you male chastity in marriage of a wide selections. male chastity slaves is designed to be very comfortable which would meet your requirements. With male chastiy you will have a different life, because it can really improve your life quality. DHgate.com offers male chasty of various sizes and colors. Come and choose what you like. We the offer you quality-guaranteed and the best male forced chastity. And you will be very glad to go online shopping on DHgate.com, because we offer you best services, best products and the fast delivery.


text:
Slovakia's ex-premier Pellegrini to form new political party
FILE – In this Sunday, Nov. 17, 2019 file photo Slovak Prime Minister Peter Pellegrini delivers a speech at the National Museum in Prague, Czech Republic. Former Slovakia's Prime Minister Peter Pellegrini announced on Wednesday a plan to leave his leftist party to establish a new political subject. Pellegrini has been deputy chairman of the Smer-Social Democracy that had dominated the country's politics since 2006. (AP Photo/Petr David Josek, file)
BRATISLAVA, Slovakia (AP) — Former Slovak Prime Minister Peter Pellegrini announced Wednesday a plan to leave his leftist party to establish a new center-left political organization.
Pellegrini has been deputy chairman of the Smer-Social Democracy party, which had dominated Slovakia's politics since 2006 before being ousted from power by a center-right party in the February parliamentary election.
His move was expected. He has clashed with the party chairman, former Premier Robert Fico, over the scandal-tainted party's future following the disappointing loss in the election.
The result sent Smer to the opposition while a new four-party coalition government took over.
Pellegrini became the prime minister after Fico's coalition government was forced to resign by the massive anti-government street protests in 2018 following the slayings of an investigative reporter and his fiancee. Investigators linked Jan Kuciak's death to his work probing possible widespread government corruption.
Pellegrini called on Fico, considered a populist leader, to resign from his party post. He said Wednesday their future cooperation wasn't possible anymore.
Pellegrini said he wants to form a new center-left party, saying he would be doing it from scratch and expected other Smer lawmakers to join him. He didn't provide further details.
A recent poll suggested it might be as popular as the Ordinary People led by Prime Minister Igor Matovic, a center-right group that won the the Feb. 29 election.
Mobile County / 3 hours ago
Biker Dad / 9 hours ago
Coronavirus / 9 hours ago
Video / 12 hours ago


text:
"Vier O-Regionen", auch Nordzentralnamibia, ( bzw. north-central region) ist eine Bezeichnung für die vier zentralnördlichen Regionen Namibias: Ohangwena, Omusati, Oshana und Oshikoto. Sie sind vor allem traditionelles Siedlungsgebiet der Ovambo.

Die Regionen sind, mit Ausnahme der südlichen Grenze, fast deckungsgleich mit dem ehemaligen Homeland Ovamboland. In diesen Regionen mehr als ein Drittel der namibischen Bevölkerung (etwa 890.000).

Literatur
 Johannes Paul: Wirtschaft und Besiedelung im südlichen Amboland. In: Wissenschaftliche Veröffentlichungen des Museums für Länderkunde zu Leipzig, N. F. 2, 1933. Mit Literaturangaben.

Einzelnachweise

Geographie (Namibia)
Oshana
Ohangwena
Omusati
Oshikoto
Geschichte der Ovambo

redpajama_set_name: RedPajamaWikipedia


The news comes just days after Swiss private bank Falcon announced it had partnered with Bitcoin Suisse to allow its customers to "to hold, buy and sell Bitcoin directly through their e-banking platform or account manager." Prior to that, it emerged that a Bitcoin certificate was on "most days" the most popular financial product available on Switzerland's main stock exchange, SIX. Meanwhile, for its project Swissquote will use Bitstamp, the exchange currently headquartered in Luxembourg, to handle payments and provide pricing information on Bitcoin. "The Bitstamp-Swissquote partnership marks a milestone in the already promising development of Bitcoin, which is being implemented gradually into the traditional financial system," the release adds. Switzerland is already considerably ahead of its neighbors Austria and Germany in the race to propagate emerging Blockchain and cryptocurrency technology.


Sorghum, an ancient cereal grain that's a staple crop in India and throughout Africa, has long been considered a safe grain alternative for people with celiac disease and gluten insensitivity. New molecular evidence confirms that sorghum is completely gluten-free, and reports that the grain provides health benefits that make it a worthy addition to any diet.
Gluten is the flexible protein in common grains like wheat, barley and rye that give them a chewy, springy quality when baked into breads or pastas. Gluten triggers inflammatory reactions in people with celiac disease or gluten sensitivity that can cause abdominal pain and digestive issues, and eventually lead to joint pain and intestinal damage. For now, the only way to avoid gluten intolerance is to stick to a strict gluten-free diet.
Paola Pontieri of the Institute of Genetics and Biophysics in Naples, Italy, led a team of researchers in analyzing the recently published sorghum genome in order to confirm that the grain contains no gluten proteins. Their results, published in the Journal of Agricultural and Food Chemistry, confirm that the gluten protein is absent in different varieties of sorghum.
They also find a variety of other sorghum health benefits, even for people without gluten intolerance. Sorghum has high nutritional value, with high levels of unsaturated fats, protein, fiber, and minerals like phosphorus, potassium, calcium, and iron. It also has more antioxidants than blueberries and pomegranates.
Recent research suggests that certain phytochemicals allow sorghum consumption to reduce the risk of colon and skin cancer more than other grains, and that other properties can promote cardiovascular health and lower cholesterol.
"Food-grade sorghums should be considered as an important option for all people, especially celiac patients," their report concluded.


There are more than 3,600 employees within the Kingdom Holding family, working in various industries with wide range of skill-sets and a wider range of nationalities.
Kingdom Holding's internal motto is "we do not build buildings, we build people", in order to operate as a learning organization, Kingdom Holding believes that the people within, are the real equity.
Managers are chosen according to their leadership skills, and leadership skills are measured by the ability and willingness to teach, when managers are keen on teaching their teams, these teams are always top performers.
It is embedded within the organizational culture to go out of the way to educate and pass on the knowledge.
All employees are encouraged to adopt the "continuous improvement" attitude and generous rewards are offered for those who come up with new ideas.


text:
The books to read in September
Many stories about spies are also stories of derring-do, something Anderson ("Lawrence in Arabia") also incorporates into his new history of Cold War intelligence. Anderson's look at four men who ran covert operations around the globe after World War II is as thrilling as it is tragic, as each man confronts the moral compromises he made in the name of democracy.
Meet Giovanna, an awkward adolescent like her foremothers in Ferrante's Neapolitan novels — except that Giovanna lives in an upper-middle-class milieu and knows nothing of her home city's blue-collar district until an overheard comment spurs her to seek out her Aunt Vittoria. Thereby hangs a tale of awakening and change that will delight both old and new fans of the elusive Italian writer.
Meissner, who as a young college student was drafted into the German army and sent to the Eastern Front, in his old age writes a letter to his grandson. At first an account of action and adventure, the letter turns to Meissner's quest to live a life of atonement. Can an individual explain his country's complicity? This novel may be more relevant now than we'd like.
We all know that 2020 is the 100th anniversary of the 19th Amendment, which secured the vote for White women. In her important new book "Vanguard," Jones shows how African American women waged their own fight for the vote, and why their achievements speak mightily to our present moment as voters, regardless of gender or race.
Read the first two title words again, and you'll get a glimmer of what Rankine ("Citizen") has in mind for her new book of essays, poems and images that confront White privilege and white silence. But the subtitle provides an opening to disrupt the old talk and make space for new ideas.
Mosley might be best known for his mystery series featuring Easy Rawlins, but in these short stories, we see the prolific author as a chronicler of Black life in America. As he overturns stereotypes and focuses on individual characters, Mosley asks us not to look away from men who are isolated and awkward, but to see them as human beings in full.
"Rage," by Bob Woodward (Sept. 15)
President Trump didn't speak on the record for Woodward's 2018 bestseller, "Fear." This time around, the Pulitzer Prize-winning associate editor of The Washington Post landed several exclusive interviews with the president and managed to obtain personal letters between Trump and North Korean leader Kim Jong Un. This may be the clearest portrait we'll get of a chaotic mind.
The Pulitzer Prize finalist, who was born in Morocco and moved to the United States in the 1990s, explores the benefits and limitations of American citizenship. Her poignant reckoning looks at a country that keeps privileged White men in power while holding at arm's length the "conditional citizens" whose race or gender doesn't conform to the elite's.
The latest novel in Robinson's series about Gilead, Iowa — which also includes Pulitzer winner "Gilead," "Home" and "Lila" — follows Jack Boughton, the black sheep of his family, who wound up an aimless, homeless alcoholic in St. Louis. There he meets Della, a Black teacher, and they embark on a complicated, poignant romance.
Programmed Racism – Pledge Times
Howard, Morehouse among five HBCUs to receive millions in new equipment for COVID-19 testing — The Undefeated
New exhibit to explore Black history in ADKs | News, Sports, Jobs
Rowden: Sports transgender topic will get Senate attention | State News
Janet Hill remembered as a leading voice, level-headed and a loving mother — Andscape
Richmond's Black History Museum celebrates 40 year anniversary


Preheat the oven to 300 F. Combine the UP extra virgin olive oil, garlic, herbs, salt, and pepper in a shallow oven proof dish.
Slice the tomatoes in half lengthwise, toss with the oil and seasonings, and place cut side down in the dish.
In a medium mixing bowl, whisk together the flour, salt and flaxseed meal. Add the olive oil and water and mix quickly with a fork until it comes together in a ball. Wrap in plastic wrap and refrigerate for at least 30 minutes. Preheat oven to 400 degrees. On a lightly floured board or parchment-covered surface, roll out the dough into a 1/4-inch-thick round. Gently press into a 10-inch fluted tart pan with a removable bottom. Cover the tart with plastic wrap and refrigerate for 30 minutes. Prick all over with the tines of a fork.
Directions Preheat the oven to 400. Saute the shallots until until lightly browned. Add the garlic and saute another minute. Combine the shallots, garlic, and basil with the beaten eggs. Season the egg mixture with salt and pepper to taste. Sprinkle 1 cup of Fontina cheese over the bottom of the crust. Arrange the oven roasted tomatoes over the cheese. Add the remaining cheese, including Romano over the tomatoes. Pour the egg shallot mixture over the top.
Bake in the oven for 25 minutes or until the filling is set, slightly puffed and golden brown. Enjoy warm, or allow to cool to room temperature. It can be made a day in advance or may be frozen and re-warmed.


September is Take-a-Man-on-a-Date Month, so I've heard. Personally, I think it is a wonderful idea. It is always great to see women taking the upper hand in the relationship. So, if you have a man worth taking out, by all means, take him out and show him that what a man can do, a woman can do better.
Having said that, what about us single ladies? I was thinking that in the same spirit of women taking charge in relationships, we should also make September Ask-a-Man-Out Month. It's sad that women are missing out on great relationships simply because they are still waiting for the man to make the first move.
Leave your clique behind: There is no quicker way to frighten a man away than to have your five BFFs staring and giggling as you try to approach him. I know you may think that asking your girlfriends to tag along for moral support is a great idea, but it will only intimidate the guy and make him less inclined to hear you out.
So, when you decide to go out on the prowl, it is best to go in alone. It is also much easier for a man to approach you if you are by yourself. So, if you have been wondering why guys don't ask you to dance at the club, it is probably because they are intimidated by your friends.
Realise that any place is a potential hunting ground: When a woman wants to meet a man, the first place she heads to is her local club or bar. While there is nothing wrong with watering holes as potential meeting places, you are limiting yourself by only considering them.
Men are everywhere, so think outside the box. The supermarket, in matatus, the queue at the bank; your options are limitless. My personal favourite is supermarkets, because you are pretty much assured the men there are single. Men with wives don't go grocery shopping.
So, the next time you see a hottie that strikes your fancy at the queue at the bank, don't stop yourself because you think it is not the right place. There is no 'right place' to meet a guy.
Don't overanalyse: The biggest mistake women make when it comes to approaching men is overthinking every little thing. When you start overthinking every little detail, you become overcome with fear and insecurity and end up backing out.
When you decide to approach a guy, you need to be as comfortable and relaxed as possible. Don't worry about what he is thinking, or if you are saying the right things. Also, don't overanalyse his responses.
Make peace with the fact that you might be rejected: Rejection is part and parcel of the dating process and just like men, women are not immune to it. It will hurt; it will discourage you, but don't let it stop you from continuing on.
So, maybe that one didn't work out as you expected, but there could be a better, more interesting guy just around the corner who will be completely smitten by you. All you have to do is make a move. Don't give up.
LIST: 10 Breathtaking Photos Of Women Of The Maasai Community You Need To See!!


text:
Posted 7 month ago by America's Got Talent
Woah! Simon Cowell Has Ansley Burns Sing Aretha Twice, She Nails It! - America's Got Talent 2019
16,698,733 views 172,146 likes 8,197 dislikes
Simon Cowell asked the singer to sing a cappella and she did an incredible job!
» Get The America's Got Talent App: http://bit.ly/AGTAppDownload
» Subscribe for More: http://bit.ly/AGTSub
» Watch America's Got Talent: The Champions Mondays 8/7c on NBC!
» Stream Anytime: http://bit.ly/AGTFullEpisodes
AMERICA'S GOT TALENT ON SOCIAL
Like AGT: https://www.facebook.com/agt
Follow AGT: https://twitter.com/agt
AGT Tumblr: http://nbcagt.tumblr.com/
AGT Instagram: http://instagram.com/agt
In season 14, NBC's America's Got Talent follows Simon Cowell, Julianne Hough, Gabrielle Union, Howie Mandel, and host Terry Crews in their talent search, showcasing unique performers from across the country.
Find America's Got Talent trailers, full episode highlights, previews, promos, clips, and digital exclusives here.
NBC ON SOCIAL
Like NBC: http://Facebook.com/NBC
Follow NBC: http://Twitter.com/NBC
NBC Tumblr: http://NBCtv.tumblr.com/
NBC Pinterest: http://Pinterest.com/NBCtv/
NBC Google+: https://plus.google.com/+NBC
YouTube: http://www.youtube.com/nbc
NBC Instagram: http://instagram.com/nbc
ABOUT AMERICA'S GOT TALENT
Creator and Executive Producer Simon Cowell returns to the judges' panel along with Howie Mandel. Also joining the panel this year are two fresh faces - award-winning actress, author and producer Gabrielle Union and Emmy Award-winning choreographer, actress, singer and dancer Julianne Hough. Terry Crews, who made a big splash as the host of the inaugural series "America's Got Talent: The Champions" earlier this year, joins as host for "America's Got Talent." With the show open to acts of all ages, "America's Got Talent" continues to celebrate the variety format like no other show on television. Year after year, "America's Got Talent" features a colorful array of singers, dancers, comedians, contortionists, impressionists, magicians, ventriloquists and hopeful stars, all vying to win America's hearts and a $1 million prize.
https://youtu.be/zz5bJ8EPXRw
http://www.youtube.com/user/americasgottalent
Little girl takes on a very HARD SONG an...
INCREDIBLE UNEXPECTED SINGERS on Got Tal...
Judges Go WILD For 13-Year-Old Courtney ...
Tom London: Magician Mystifies Crowd Wit...
His Voice Is So Emotional That Even Simo...
Top 5 Singing Auditions
Grace VanderWaal, Sofie Dossi, And The M...
When Judges BUZZ Too Soon! | Britain's G...
BEST Of America's Got Talent: The Champi...
This Girl SURPRISED The Judges With This...


Located in London, between Monument and London Bridge, FengShui serves up a wide variety of authentic Chinese cuisine, including dim sum. The establishment lives up to its names, with a slick, carefully designed interior with as much of a distinctive oriental flavour as the food.
Groupon has verified that the customer actually visited FengShui.


The support, knowledge and experience our volunteers offer our police officers and staff ensures that organisational capabilities, performance and core policing work is carried out to a high standard. They also provide the highest level of service to the public, add to the diversity of our workforce and help us see things from a different perspective. They are vital.
Why should I be a community volunteer with British Transport Police?
When you volunteer with us, you'll become part of our team and learn how a national, specialised police force works. In return, we'll help you gain valuable skills and provide you with training.
Gain new skills and experiences – we do our best to help you develop the skills you want. Our varied roles allow you the chance to gain a broad skill set.
Use your skills and experience – while learning new skills you can keep your existing skill set up to date. We'll try and find a role that uses your skills to their maximum potential.
Enhance your CV – most employers see volunteering as an essential component of any CV. Volunteering also gives you strong examples that can be valuable in interviews.
Make a difference to your community – volunteers help us make the railways safer. You will have the chance to work on community initiatives that can be very rewarding.
Meet new people – you will meet and work with a range of police officers and staff who will welcome you into the team and help you with your role.
Gain an insight into BTP – whether you are interested in a career with us or want to learn more about what we do, volunteering allows you to see 'behind the scenes'.
Being a volunteer is a very rewarding experience. Hear more from some of our volunteers about how they make the difference.
Find a role you would like to apply for.
An advisor will send you an application form and invite you for an interview to discuss your skills, experience and why you would like to volunteer with us. This will help us identify a suitable volunteer role for you and you can ask questions. If we have no available or suitable roles we will keep your application on file.
We carry out vetting including checks for any criminal records and financial difficulty due to the nature of our work. You must have been resident in the UK for at least three years before you apply to be able to complete this.
After the recruitment and vetting process, you'll be ready to volunteer with us.
BTP volunteer induction - an overview of the organisation, our visions and values. Including an online induction and an invite to a group induction day. This should take place within three months of starting with us.
Support - you'll be introduced to a volunteer facilitator who will ensure you are happy in your role and you have everything you need.
Training - depending on your role you may be offered specific training to help you gain more knowledge or expertise.
Development - we aim to make volunteering fulfilling and challenging and we will help you with your development as much as we can. This includes regular development days for volunteers providing information on BTP initiatives and an opportunity to meet other volunteers from across the force.
Recognition - we appreciate everyone who donates their time to us and we arrange annual divisional and national award ceremonies to recognise this dedication.
Reimbursement of out of pocket expenses - we will reimburse reasonable travel expense depending on your hours of volunteering, we may provide a subsistence payment.
Volunteer hours – complete a minimum of eight hours a month for six months. You are of course welcome to complete more hours and stay with us much longer!
Recording volunteer hours – record your volunteering hours regularly via an electronic system that can be accessed from home as well as from a force computer.
Adhere to Force policy and procedures – as a volunteer representing us we expect you to be professional and follow our values and standards of behaviour.


text:
The Perils of U.S. Support for Religion Regulation in Nigeria
Obama meets with Nigeria's Nero Ughwujabo, 10 other young leaders in Amsterdam
House of Assembly inquiry calls Jonathan over oil block sale scandal
Collective Action on Corruption in Nigeria – A New Report
Buhari's Sick Leave Re-energizes Presidency
New Nigeria Post
Progress is Possible
ChangeNGR
#LOVENIGERIA
News Pictures Politics
Escaping Boko Haram: 'They wanted me to carry a bomb'
March 25, 2016 March 25, 2016 Editor	Boko Haram
Girls as young as 12 are being used by the Nigerian militant group Boko Haram as female suicide bombers.
On Tuesday 9 February, two Nigerian girls entered a camp for displaced people in the country's north-east. Minutes later they detonated their explosive vests, killing 58 people. A third girl refused to take part in the suicide mission for Islamist militant group Boko Haram. This is her story.
Hauwa, not her real name, doesn't know her age, but she looks 17 or 18.
She had been held by Boko Haram for more than a year when her captors suggested the plan to attack the Dikwa camp.
In return for carrying out their mission, the three girls were told they would go to paradise.
But Hauwa knew that she had to defy them.
'Spiritual problems'
"I said 'No', since my mum is residing in Dikwa, I won't go and kill people there. I would rather go and stay with my family, even if I die there," she tells me through a translator.
Both her parents and her siblings, except for one brother who had been captured with her, were staying in the camp at Dikwa in Borno state, along with about 50,000 others forced from their homes.
The Dikwa camp is home to tens of thousands of people
Hauwa explains how she ended up being lured into joining the group.
"I had spiritual problems and so the Boko Haram told me they could help get rid of them," she says.
We do not know exactly what Hauwa was suffering from, but these so-called "evil spirits" had caused her to soil herself and even put her hand into a fire.
Whatever the reason, she saw Boko Haram as the answer to her problems, and they took her in.
She remembers a typical day living with the militants.
"We were living in grass-thatched houses. When my husband was around, I cooked three times a day… the men would steal meat and bring it for us to cook."
After a while, Hauwa separated from her husband and then got remarried.
Her second husband then ran away and when she refused to take a third husband, the group suggested their plan:
"They said since I refused to re-marry, I should take the bomb," she says.
The Dikwa camp for internally displaced persons (IDPs) was 85km (50 miles) north-east of Maiduguri, the state capital of Borno and the birthplace of Boko Haram.
Hauwa knew it well and it was not far from the place she was being held by the militants, so the night before the attack was due to take place, she sneaked out very early in the morning.
Her plan was to alert her family and others staying at Dikwa of the impending attack.
But she was too late.
By the time she reached Dikwa camp, the two suicide bombers had already struck.
An army officer showed the BBC team the scene of the attack.
"This is the spot where the first explosion went off," he said pointing to brown patches on the tarmac, where blood stains had been darkened by a layer of dust.
The camp stretches across both sides of the road and so residents still have to pass the scene of the attack every day to get water and food.
There are 15,000 people still living here and they are scared.
But they have nowhere safe to go, so they are staying here.
Now, they say they cannot trust anyone, not even children.
An elderly woman, Falmata Mohammed, remembers the minutes before the attack.
"A soldier was trying to arrange our queues… There was this woman wearing a red veil and she had long hair."
For parents in this part of Nigeria, the fear of Boko Haram is all too real.
The group is prepared not only to abduct their children, but to send their own young back as assassins in the very places they have sought refuge.
This is the same state where Boko Haram kidnapped more than 200 schoolgirls from the town of Chibok in April 2014. Most of them are still missing.
Hauwa chose to defy the group and to escape, saving her own and the many lives of her would-be victims.
We talk about her future, but when the topic of children comes up, she laughs it off.
"I'd like to get an education," she says.
← Belgium Under Terror Siege
Hon. Patrick Obahiagbon on Benin-Ore-Lagos Road →
Delta Guber: Ogboru heads to court of appeal
November 13, 2015 November 13, 2015 Editor 0
August 18, 2019 August 18, 2019 Editor 0
Video: Lack of accountability & transparency derails progress in Africa: Transparency International
December 2, 2015 December 4, 2015 Editor 0
Subscribe to NewNigeriaPost via Email
Enter your email address to subscribe to New Nigeria Post and receive notifications of new posts by email.
@newnigeriapost on Twitter
New Nigeria Post – Progress is possible, the premier digital news platform for all Nigeria - visioning a greater Nigeria
Copyright © 2015 New Nigeria Post. All rights reserved.
ChangeNGR News
ChangeNGR Petitions
accountabilty & Transparency Africa Akpabio APC arms deal Beyonce Boko Haram budget2016 Buhari ChangeNGR corruption dasuki dasukigate Delta State Economy education EFCC Election Elections Fraud fruad Health INEC IS Islamic State Lagos lovenigeria Love Nigeria Malaria Militants mtn Naija Naija comedy nigeira nigeria Nigerian economy NNPC Paris Attack politics proudly nigerian South Africa Sports telecoms Terrorism Tompolo
Enter your email address to subscribe to this newnigeriapost and receive news and updates by email.
Don't miss out on the latest from New Nigeria Post...
World, Videos and entertainment
New Nigeria Post – Progress is possible
We use cookies. By browsing our site you agree to our use of cookies.Accept


text:
Atlanta Falcons Carolina Panthers News NFL NFL News Videos
Julio Jones Records 6th 300-Yard Receiving Game in NFL History vs. Panthers
By Tony Montalto October 2, 2016
Leave a Comment on Julio Jones Records 6th 300-Yard Receiving Game in NFL History vs. Panthers
The Carolina Panthers couldn't cover Atlanta Falcons wide receiver Julio Jones at all today, and that's pretty much all you need to know.
Jones hauled in 12 passes for a whopping 300 receiving yards and one touchdown reception. It's the 6th game in NFL history that a receiver has hauled in 300 receiving yards. Lions great Calvin Johnson was the last one to do it before Jones today, as he had 329 receiving yards against the Dallas Cowboys on October 27, 2013.
The 300 receiving yard game is also the new Falcons record for the most receiving yards in a game, topping the 259 yards he dropped on the Green Bay Packers last season on Monday Night Football in Green Bay.
Monster games from Jones and Matt Ryan lead the Falcons past the defending NFC Champion Panthers 48-33 to drop the Panthers to 1-3 with their only win coming against the San Francisco 49ers two weeks ago in Carolina. The Vikings completely shut down Carolina last week.
In addition to the third loss of the season, 2015 NFL MVP Cam Newton left the game and is being evaluated for a concussion. Derek Anderson replaced Newton in the game, as he completed 17 passes in 23 attempts for 172 passing yards, two touchdowns, and two interceptions on the day.
Falcons fans were chanting " Julio, Julio" with just under four minutes to go in the game.
The 27-year-old Jones was held to just one catch for 16 yards on Monday Night Football versus the Saints despite the Falcons scoring 45 points as he was said to be battling a calf injury the week leading up to the game. It appears that calf injury is a thing of the past.
Jones now has 22 catches for 488 receiving yards and 3 touchdowns this season. Last season, Jones had the second-most receiving yards in NFL history with 1,871 yards on 136 catches. Calvin Johnson holds the record with 1,964 yards which happened in 2012.
[twitter-follow screen_name='tony_montalto' show_count='yes']
Tags: American Football Atlanta Falcons Football Julio Jones NFL
Published by Tony Montalto
Twitter: @montalto_tony	View all posts by Tony Montalto
Previous Entry Cowboys WR Dez Bryant (Knee) Officially Inactive vs. 49ers
Next Entry 2015 NFL MVP Cam Newton Diagnosed With Concussion in Loss to Falcons


This inviting narrow-lot design displays classic details from a bygone era—a covered veranda in the front, a gabled roof, and fish-scale detailing. Ideal for city lots, this design features four bedrooms, including a master suite with a walk-in closet and a private bath that includes a separate tub and shower and double-bowl vanity. One of the family bedrooms is graced by a box window. First-floor living areas include a formal living room, with a gas fireplace, that opens to a dining room. Toward the rear of the home, a kitchen overlooks a breakfast nook and the family room, which is warmed by another gas fireplace.
1230 sq/ft width 25' 6" x depth 48' 3"
124 sq/ft width 11' x depth 11' 4"
124 sq/ft width 11' 2" x depth 11' 2"
48 sq/ft width 8' 6" x depth 5' 8"
68 sq/ft width 9' 2" x depth 7' 6"
193 sq/ft width 15' 6" x depth 12' 6"
214 sq/ft width 15' x depth 14' 4"
41 sq/ft width 8' 8" x depth 4' 10"
262 sq/ft width 25' x depth 10' 6"
51 sq/ft width 9' x depth 5' 8"


As always, I can't believe it's time for year-in-review posts!
Let's go over the best in my Instagram for the year.
Estate sailing was in full effect early in the year. It's a good way to keep busy on grey winter Saturdays.
Another estate sale, this time with handpainted garbage cans.
Estate sailing with the boys. Not sure how I would survive without my partners-in-crime.
We had this amazing visitor at my office.
We spent a lot of time in the park system of Bergen County. It was colder this day than we planned for.
You know things are changing when part of the party consists of trying to make the babies smile in unison.
The beginning of warmer weather means more opportunities for Flatiron Building photos.
We located some more of my ancestors in local cemeteries!
I planned another random adventure, this time to Penn's Cave in Pennsylvania.
I made my first flower crown and we went to the NYC pride parade.
We went on a ferry boat in Lake Ontario to a wonderful wedding!
I got to wear one of my favorite dresses EVER.
I visited my friend Wadee'ah and watched her make cake for her custom cake company, Terry's Heaven-Lee Bakery.
We went to Florida for Nan's 90th birthday. One day, Will and I invaded her house and we made Pistachio-Rose Clouds, which are super delicious.
Nan's birthday party definitely had a theme. Mom had been talking about it for 2 years.
We stayed at a house with this view in early August, in Boothbay Harbor, Maine.
We caught some lightning outside of our window. I think this is the best lightning photo I have ever taken! The Sony NEX-6 has served me well.
We took a few trips to the Met, one in particular to see Manus x Machina: Fashion in an Age of Technology.
Still regretting not buying what we called the Chewbacca painting at one of the oddest estate sales that we'd ever been to.
When the light looks like this, you have to take a photo.
I was already obsessed with the Snapchat bee filter, so I had to try it again once I decided to go with turquoise hair.
Will accompanied me to the Martha Stewart Weddings Bridal Market party, where he then indulged me by trying all of the photobooths.
Here's our family photo at the pumpkin patch/apple farm.
Halloween look number 1 was a complete success. I took an existing headband with battery-powered skulls and turned it into a gothy flower crown.
I fully embraced any and all 90s style throwbacks that I could.
Cooler weather and changing leaves put us back on track for long walks in the woods and on trails.
We went to Las Vegas with 28 other people and renewed our wedding vows for our 10th anniversary.
The Bellagio fountains have the same level of picture-worthiness as the Flatiron Building.
I created a number of travel detritus still-life photos. They are one of my favorite ways to create memories of our trips that are really fun to look back on.
Still trying to be a little bit of a photographer, and then being surprised and mildly annoyed when my subject turns on me and then I accidentally make a photo that is WAY better than what I intentioned. It feels like cheating.
I surprised Will with a trip to New Orleans for our birthday weekend!
Here is Will in the Napoleon House, our new favorite bar.
We got to spend a few minutes with Jason after a dinner at Sylvain, a new favorite in New Orleans. I'm going to collaborate on a New Orleans guide with William in Q1.
Back home and back to estate sailing. We ended up in a top 5 weirdest house, with an OBGYN's office in the basement. Brian's face says it all.
I think that is all for the recap. I am wishing you all the best for 2017.
We arrived at Penn's Cave and immediately made our way down the hill to the cave entrance, where you get on the boat.
After walking down a steep hill and a bunch of steps, you get to the boat launch.
You can see the steps behind us here.
You ride in a long skinny boat, designed for fitting into tight spaces.
Here's the view back at the dock from the boat.
Here's a look at a boat we passed in the cave. You can get a bit of an idea about the scale of things. You can also tell by this photo and others that there are many challenges in photography in a (mostly) dark cave.
The lights are turned off and on, only used when the boats are coming through.
We could have spent hours, days, weeks, or longer examining all of the amazing rock formations.
There wasn't anything about it on the tour, but I would be interested to learn about the process of installing all of these lights in the cave.
We exited the back of the cave out of this hole, took a big loop around the lake and came back. I included video footage from the ride around the lake in this video from the trip.
More beautiful formations on our way back to the cave entrance. Plus, the boat comes back backwards, so our ride in the back had a much better view.
Penn's Cave is definitely worth a visit. The tour was interesting, and they also have a wildlife tour since the property houses multiple species of deer as well as bison and steer. There isn't too much nearby – we drove about an hour to Altoona for the night, which happened to also be the location of Horseshoe Curve, which will be featured in a future post.
I love the fair. The sights and sounds, the weird food choices, the questionable rides, it's all part of the magic. It's even better when the fair is in your town! This year, we went to the fair on a weeknight (which felt strange) with David and Brian. It was Brian's first time at the Meadowlands Fair!
First stop, snacks! We ended up not getting any of these. We have a system, and it generally begins with a corn dog. I almost NEVER want a hot dog, but I can't resist a corn dog at the fair.
The light was amazing as the sun was setting.
Look at the light! There are benefits to going to the fair while it is still light out!
Always, a stop is required for meat on a stick for Will.
I interrupted him for this photo.
I really appreciate and enjoy the fonts and design on the food stands.
I refuse to ride these swings. We left the rides mostly to David and Brian, but I did join them for an AMAZING turn on the Tilt-A-Whirl.
Another successful trip to the fair. Now to look forward to the more traditional (meaning a mix of carnival elements and farm animal showcases) fair in a few weeks.
I am dreadfully behind on posting our story and images from Congaree National Park. We drove back from Florida with only Congaree on our official list of places to visit. I booked us a stay in the nearby Hampton Inn Columbia (I was committed to maximizing the HHonors Points on this trip), and we got up early to check out the park.
It turns out that we didn't pick the best time to visit Congaree National Park, because it is a floodplain forest, and it was very flooded. We had no grand intentions, but were unable to walk the entire Boardwalk Loop trail, because certain parts of the boardwalk were totally underwater.
We spent some time in the visitor center, watching the film about the park and getting a map and some information on the accessible boardwalk areas, we were off on our way.
As we had just learned, it is all about the trees! Congaree National Park is a rare group of old-growth trees in the United States, the largest existing tract in the country. The initial development of the US contributed greatly to a lack of old-growth forests, since many of them were cut down to create early homes and buildings.
It was incredibly humid when we were there, and quite warm for December 29th.
Here we are, taking smirky selfies at the end of the accessible boardwalk. You can see the water right behind us.
I don't have that many photos, because nothing captures this beautiful place! This picture gives you a small idea of the scale of the trees in Congaree National Park.
As with many other places, we really like visiting things in the off season. While it was unfortunate that we couldn't walk the entire trail due to flooding, we got to experience total immersion in an amazing old forest. There were only a few other small groups of people around on the trail, which was still long enough for us to split up and feel like we had it all to ourselves.
Congaree National Park is beautiful, and the importance of it as the last remaining old-growth forest in the US is exactly why the National Park system is necessary. All of my photos can be seen here on Flickr.