text:
//*********************************************************//
//    Copyright (c) Microsoft. All rights reserved.
//
//    Apache 2.0 License
//
//    You may obtain a copy of the License at
//    http://www.apache.org/licenses/LICENSE-2.0
//
//    Unless required by applicable law or agreed to in writing, software
//    distributed under the License is distributed on an "AS IS" BASIS,
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
//    implied. See the License for the specific language governing
//    permissions and limitations under the License.
//
//*********************************************************//
#if FALSE
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using System.Windows.Threading;
using Microsoft.PythonTools.Analysis;
using Microsoft.PythonTools.Intellisense;
using Microsoft.PythonTools.Parsing;
using Microsoft.PythonTools.Parsing.Ast;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.Text;
using Microsoft.VisualStudio.Text.Editor;
using Microsoft.VisualStudio.TextManager.Interop;
using Microsoft.VisualStudioTools.Project;

namespace Microsoft.PythonTools.Navigation {
    /// <summary>
    /// Implements the navigation bar which appears above a source file in the editor.
    ///
    /// The navigation bar consists of two drop-down boxes.  On the left hand side is a list
    /// of top level constructs.  On the right hand side are list of nested constructs for the
    /// currently selected top-level construct.
    ///
    /// When the user moves the caret the current selections are automatically updated.  If the
    /// user is inside of a top level construct but not inside any of the available nested
    /// constructs then the first element of the nested construct list is selected and displayed
    /// grayed out.  If the user is inside of no top level constructs then the 1st top-level
    /// construct is selected and displayed as grayed out.  It's first top-level construct is
    /// also displayed as being grayed out.
    ///
    /// The most difficult part of this is handling the transitions from one state to another.
    /// We need to change the current selections due to events from two sources:  The first is selections
    /// in the drop down and the 2nd is the user navigating within the source code.  When a change
    /// occurs we may need to update the left hand side (along w/ a corresponding update to the right
    /// hand side) or we may need to update the right hand side.  If we are transitioning from
    /// being outside of a known element to being in a known element we also need to refresh
    /// the drop down to remove grayed out elements.
    /// </summary>
    class DropDownBarClient : IVsDropdownBarClient {
        private IPythonProjectEntry _projectEntry;                      // project entry which gets updated with new ASTs for us to inspect.
        private ReadOnlyCollection<DropDownEntryInfo> _topLevelEntries; // entries for top-level members of the file
        private ReadOnlyCollection<DropDownEntryInfo> _nestedEntries;   // entries for nested members in the file
        private readonly Dispatcher _dispatcher;                        // current dispatcher so we can get back to our thread
        private IWpfTextView _textView;                                 // text view we're drop downs for
        private IVsDropdownBar _dropDownBar;                            // drop down bar - used to refresh when changes occur
        private int _curTopLevelIndex = -1, _curNestedIndex = -1;       // currently selected indices for each oar

        private static readonly ImageList _imageList = GetImageList();
        private static readonly ReadOnlyCollection<DropDownEntryInfo> EmptyEntries = new ReadOnlyCollection<DropDownEntryInfo>(new DropDownEntryInfo[0]);

        private const int TopLevelComboBoxId = 0;
        private const int NestedComboBoxId = 1;

        public DropDownBarClient(IWpfTextView textView, IPythonProjectEntry pythonProjectEntry) {
            Utilities.ArgumentNotNull("textView", textView);
            Utilities.ArgumentNotNull("pythonProjectEntry", pythonProjectEntry);

            _projectEntry = pythonProjectEntry;
            _projectEntry.OnNewParseTree += ParserOnNewParseTree;
            _textView = textView;
            _topLevelEntries = _nestedEntries = EmptyEntries;
            _dispatcher = Dispatcher.CurrentDispatcher;
            _textView.Caret.PositionChanged += CaretPositionChanged;
        }

        internal void Unregister() {
            _projectEntry.OnNewParseTree -= ParserOnNewParseTree;
            _textView.Caret.PositionChanged -= CaretPositionChanged;
        }

        public void UpdateView(IWpfTextView textView) {
            if (_textView != textView) {
                _textView.Caret.PositionChanged -= CaretPositionChanged;
                _textView = textView;
                _textView.Caret.PositionChanged += CaretPositionChanged;
                CaretPositionChanged(this, new CaretPositionChangedEventArgs(null, _textView.Caret.Position, _textView.Caret.Position));
            }
        }

        #region IVsDropdownBarClient Members

        /// <summary>
        /// Gets the attributes for the specified combo box.  We return the number of elements that we will
        /// display, the various attributes that VS should query for next (text, image, and attributes of
        /// the text such as being grayed out), along with the appropriate image list.
        ///
        /// We always return the # of entries based off our entries list, the exact same image list, and
        /// we have VS query for text, image, and text attributes all the time.
        /// </summary>
        public int GetComboAttributes(int iCombo, out uint pcEntries, out uint puEntryType, out IntPtr phImageList) {
            uint count = 0;

            switch (iCombo) {
                case TopLevelComboBoxId:
                    CalculateTopLevelEntries();
                    count = (uint)_topLevelEntries.Count;
                    break;
                case NestedComboBoxId:
                    CalculateNestedEntries();
                    count = (uint)_nestedEntries.Count;
                    break;
            }

            pcEntries = count;
            puEntryType = (uint)(DROPDOWNENTRYTYPE.ENTRY_TEXT | DROPDOWNENTRYTYPE.ENTRY_IMAGE | DROPDOWNENTRYTYPE.ENTRY_ATTR);
            phImageList = _imageList.Handle;
            return VSConstants.S_OK;
        }

        public int GetComboTipText(int iCombo, out string pbstrText) {
            pbstrText = null;
            return VSConstants.S_OK;
        }

        /// <summary>
        /// Gets the entry attributes for the given combo box and index.
        ///
        /// We always use plain text unless we are not inside of a valid entry
        /// for the given combo box.  In that case we ensure the 1st item
        /// is selected and we gray out the 1st entry.
        /// </summary>
        public int GetEntryAttributes(int iCombo, int iIndex, out uint pAttr) {
            pAttr = (uint)DROPDOWNFONTATTR.FONTATTR_PLAIN;

            if (iIndex == 0) {
                switch (iCombo) {
                    case TopLevelComboBoxId:
                        if (_curTopLevelIndex == -1) {
                            pAttr = (uint)DROPDOWNFONTATTR.FONTATTR_GRAY;
                        }
                        break;
                    case NestedComboBoxId:
                        if (_curNestedIndex == -1) {
                            pAttr = (uint)DROPDOWNFONTATTR.FONTATTR_GRAY;
                        }
                        break;
                }
            }

            return VSConstants.S_OK;
        }

        /// <summary>
        /// Gets the image which is associated with the given index for the
        /// given combo box.
        /// </summary>
        public int GetEntryImage(int iCombo, int iIndex, out int piImageIndex) {
            piImageIndex = 0;

            switch (iCombo) {
                case TopLevelComboBoxId:
                    var topLevel = _topLevelEntries;
                    if (iIndex < topLevel.Count) {
                        piImageIndex = topLevel[iIndex].ImageListIndex;
                    }
                    break;
                case NestedComboBoxId:
                    var nested = _nestedEntries;
                    if (iIndex < nested.Count) {
                        piImageIndex = nested[iIndex].ImageListIndex;
                    }
                    break;
            }

            return VSConstants.S_OK;
        }

        /// <summary>
        /// Gets the text which is displayed for the given index for the
        /// given combo box.
        /// </summary>
        public int GetEntryText(int iCombo, int iIndex, out string ppszText) {
            ppszText = String.Empty;
            switch (iCombo) {
                case TopLevelComboBoxId:
                    var topLevel = _topLevelEntries;
                    if (iIndex < topLevel.Count) {
                        ppszText = topLevel[iIndex].Name;
                    }
                    break;
                case NestedComboBoxId:
                    var nested = _nestedEntries;
                    if (iIndex < nested.Count) {
                        ppszText = nested[iIndex].Name;
                    }
                    break;
            }

            return VSConstants.S_OK;
        }

        public int OnComboGetFocus(int iCombo) {
            return VSConstants.S_OK;
        }

        /// <summary>
        /// Called when the user selects an item from the drop down.  We will
        /// update the caret to beat the correct location, move the view port
        /// so that the code is centered on the screen, and we may refresh
        /// the combo box so that the 1st item is no longer grayed out if
        /// the user was originally outside of valid selection.
        /// </summary>
        public int OnItemChosen(int iCombo, int iIndex) {
            if (_dropDownBar == null) {
                return VSConstants.E_UNEXPECTED;
            }
            switch (iCombo) {
                case TopLevelComboBoxId:
                    _dropDownBar.RefreshCombo(NestedComboBoxId, 0);
                    var topLevel = _topLevelEntries;
                    if (iIndex < topLevel.Count) {
                        int oldIndex = _curTopLevelIndex;
                        _curTopLevelIndex = iIndex;
                        if (oldIndex == -1) {
                            _dropDownBar.RefreshCombo(TopLevelComboBoxId, iIndex);
                        }
                        CenterAndFocus(topLevel[iIndex].Start.Index);
                    }
                    break;
                case NestedComboBoxId:
                    var nested = _nestedEntries;
                    if (iIndex < nested.Count) {
                        int oldIndex = _curNestedIndex;
                        _curNestedIndex = iIndex;
                        if (oldIndex == -1) {
                            _dropDownBar.RefreshCombo(NestedComboBoxId, iIndex);
                        }
                        CenterAndFocus(nested[iIndex].Start.Index);
                    }
                    break;
            }
            return VSConstants.S_OK;
        }

        public int OnItemSelected(int iCombo, int iIndex) {
            return VSConstants.S_OK;
        }

        /// <summary>
        /// Called by VS to provide us with the drop down bar.  We can call back
        /// on the drop down bar to force VS to refresh the combo box or change
        /// the current selection.
        /// </summary>
        public int SetDropdownBar(IVsDropdownBar pDropdownBar) {
            _dropDownBar = pDropdownBar;
            if (_dropDownBar != null) {
                CaretPositionChanged(this, new CaretPositionChangedEventArgs(null, _textView.Caret.Position, _textView.Caret.Position));
            }

            return VSConstants.S_OK;
        }

        #endregion

        #region Selection Synchronization

        private void CaretPositionChanged(object sender, CaretPositionChangedEventArgs e) {
            int newPosition = e.NewPosition.BufferPosition.Position;

            var topLevel = _topLevelEntries;
            int curTopLevel = _curTopLevelIndex;

            if (curTopLevel != -1 && curTopLevel < topLevel.Count) {
                if (newPosition >= topLevel[curTopLevel].Start.Index && newPosition <= topLevel[curTopLevel].End.Index) {
                    UpdateNestedComboSelection(newPosition);
                } else {
                    FindActiveTopLevelComboSelection(newPosition, topLevel);
                }
            } else {
                FindActiveTopLevelComboSelection(newPosition, topLevel);
            }
        }

        private void FindActiveTopLevelComboSelection(int newPosition, ReadOnlyCollection<DropDownEntryInfo> topLevel) {
            if (_dropDownBar == null) {
                return;
            }

            int oldTopLevel = _curTopLevelIndex;

            // left side has changed
            bool found = false;
            for (int i = 0; i < topLevel.Count; i++) {
                if (newPosition >= topLevel[i].Start.Index && newPosition <= topLevel[i].End.Index) {
                    _curTopLevelIndex = i;

                    // we found a new left hand side
                    if (oldTopLevel == -1) {
                        // we've selected something new, we need to refresh the combo to
                        // to remove the grayed out entry
                        _dropDownBar.RefreshCombo(TopLevelComboBoxId, i);
                    } else {
                        // changing from one top-level to another, just update the selection
                        _dropDownBar.SetCurrentSelection(TopLevelComboBoxId, i);
                    }

                    // update the nested entries
                    CalculateNestedEntries();
                    _dropDownBar.RefreshCombo(NestedComboBoxId, 0);
                    UpdateNestedComboSelection(newPosition);
                    found = true;
                    break;
                }
            }

            if (!found) {
                // there's no associated entry, we should disable the bar
                _curTopLevelIndex = -1;
                _curNestedIndex = -1;

                if (oldTopLevel != -1) {
                    // we need to refresh to clear both combo boxes since there is no associated entry
                    _dropDownBar.RefreshCombo(TopLevelComboBoxId, -1);
                    _dropDownBar.RefreshCombo(NestedComboBoxId, -1);
                }
            }

            UpdateNestedComboSelection(newPosition);
        }

        private void UpdateNestedComboSelection(int newPosition) {
            // left side has not changed, check rhs
            int curNested = _curNestedIndex;
            var nested = _nestedEntries;

            if (curNested != -1 && curNested < nested.Count) {
                if (newPosition < nested[curNested].Start.Index || newPosition > nested[curNested].End.Index) {
                    // right hand side has changed
                    FindActiveNestedSelection(newPosition, nested);
                }
            } else {
                FindActiveNestedSelection(newPosition, nested);
            }
        }

        private void FindActiveNestedSelection(int newPosition, ReadOnlyCollection<DropDownEntryInfo> nested) {
            if (_dropDownBar == null) {
                return;
            }

            int oldNested = _curNestedIndex;

            bool found = false;

            if (_curTopLevelIndex != -1) {
                for (int i = 0; i < nested.Count; i++) {
                    if (newPosition >= nested[i].Start.Index && newPosition <= nested[i].End.Index) {
                        _curNestedIndex = i;

                        if (oldNested == -1) {
                            // we've selected something new, we need to refresh the combo to
                            // to remove the grayed out entry
                            _dropDownBar.RefreshCombo(NestedComboBoxId, i);
                        } else {
                            // changing from one nested to another, just update the selection
                            _dropDownBar.SetCurrentSelection(NestedComboBoxId, i);
                        }

                        found = true;
                        break;
                    }
                }
            }

            if (!found) {
                // there's no associated entry, we should disable the bar
                _curNestedIndex = -1;

                // we need to refresh to clear the nested combo box since there is no associated nested entry
                _dropDownBar.RefreshCombo(NestedComboBoxId, -1);
            }
        }

        #endregion

        #region Entry Calculation

        /// <summary>
        /// Data structure used for tracking elements of the drop down box in the navigation bar.
        /// </summary>
        struct DropDownEntryInfo {
            public readonly Statement Body;

            public DropDownEntryInfo(Statement body) {
                Body = body;
            }

            /// <summary>
            /// Gets the name which should be displayed for the text in the drop down.
            /// </summary>
            public string Name {
                get {
                    ClassDefinition klass = Body as ClassDefinition;
                    if (klass != null) {
                        return klass.Name;
                    }

                    FunctionDefinition func = Body as FunctionDefinition;
                    if (func != null) {
                        return func.Name;
                    }

                    return String.Empty;
                }
            }

            /// <summary>
            /// Gets the index in our image list which should be used for the icon to display
            /// next to the drop down element.
            /// </summary>
            public int ImageListIndex {
                get {
                    ImageListOverlay overlay = ImageListOverlay.ImageListOverlayNone;
                    string name = Name;
                    if (name != null && name.StartsWith("_") && !(name.StartsWith("__") && name.EndsWith("__"))) {
                        overlay = ImageListOverlay.ImageListOverlayPrivate;
                    }

                    FunctionDefinition funcDef;
                    if (Body is ClassDefinition) {
                        return GetImageListIndex(ImageListKind.Class, overlay);
                    } else if ((funcDef = Body as FunctionDefinition) != null) {
                        return GetImageListIndex(GetImageListKind(funcDef), overlay);
                    }

                    return 0;
                }
            }

            private static ImageListKind GetImageListKind(FunctionDefinition funcDef) {
                ImageListKind imageKind = ImageListKind.Method;
                if (funcDef.Decorators != null && funcDef.Decorators.Decorators.Count == 1) {
                    foreach (var decorator in funcDef.Decorators.Decorators) {
                        NameExpression nameExpr = decorator as NameExpression;
                        if (nameExpr != null) {
                            if (nameExpr.Name == "property") {
                                imageKind = ImageListKind.Property;
                                break;
                            } else if (nameExpr.Name == "staticmethod") {
                                imageKind = ImageListKind.StaticMethod;
                                break;
                            } else if (nameExpr.Name == "classmethod") {
                                imageKind = ImageListKind.ClassMethod;
                                break;
                            }
                        }
                    }
                }
                return imageKind;
            }

            /// <summary>
            /// Gets the location where the language element associated with the drop
            /// down entry begins.
            /// </summary>
            public SourceLocation Start {
                get {
                    ClassDefinition klass = Body as ClassDefinition;
                    if (klass != null) {
                        return klass.GetStart(klass.GlobalParent);
                    }

                    FunctionDefinition func = Body as FunctionDefinition;
                    if (func != null) {
                        return func.GetStart(func.GlobalParent);
                    }

                    return SourceLocation.None;
                }
            }

            /// <summary>
            /// Gets the location where the language element associated with the
            /// drop down ends.
            /// </summary>
            public SourceLocation End {
                get {
                    ClassDefinition klass = Body as ClassDefinition;
                    if (klass != null) {
                        return klass.GetEnd(klass.GlobalParent);
                    }

                    FunctionDefinition func = Body as FunctionDefinition;
                    if (func != null) {
                        return func.GetEnd(func.GlobalParent);
                    }

                    return SourceLocation.None;
                }
            }
        }

        /// <summary>
        /// An enum which is synchronized with our image list for the various
        /// kinds of images which are available.  This can be combined with the
        /// ImageListOverlay to select an image for the appropriate member type
        /// and indicate the appropiate visiblity.  These can be combined with
        /// GetImageListIndex to get the final index.
        ///
        /// Most of these are unused as we're just using an image list shipped
        /// by the VS SDK.
        /// </summary>
        enum ImageListKind {
            Class,
            Unknown1,
            Unknown2,
            Enum,
            Unknown3,
            Lightning,
            Unknown4,
            BlueBox,
            Key,
            BlueStripe,
            ThreeDashes,
            TwoBoxes,
            Method,
            StaticMethod,
            Unknown6,
            Namespace,
            Unknown7,
            Property,
            Unknown8,
            Unknown9,
            Unknown10,
            Unknown11,
            Unknown12,
            Unknown13,
            ClassMethod
        }

        /// <summary>
        /// Indicates the overlay kind which should be used for a drop down members
        /// image.  The overlay kind typically indicates visibility.
        ///
        /// Most of these are unused as we're just using an image list shipped
        /// by the VS SDK.
        /// </summary>
        enum ImageListOverlay {
            ImageListOverlayNone,
            ImageListOverlayLetter,
            ImageListOverlayBlue,
            ImageListOverlayKey,
            ImageListOverlayPrivate,
            ImageListOverlayArrow,
        }

        /// <summary>
        /// Turns an image list kind / overlay into the proper index in the image list.
        /// </summary>
        private static int GetImageListIndex(ImageListKind kind, ImageListOverlay overlay) {
            return ((int)kind) * 6 + (int)overlay;
        }

        /// <summary>
        /// Reads our image list from our DLLs resource stream.
        /// </summary>
        private static ImageList GetImageList() {
            ImageList list = new ImageList();
            list.ImageSize = new Size(0x10, 0x10);
            list.TransparentColor = Color.FromArgb(0xff, 0, 0xff);
            Stream manifestResourceStream = typeof(DropDownBarClient).Assembly.GetManifestResourceStream("Microsoft.Resources.completionset.bmp");
            list.Images.AddStrip(new Bitmap(manifestResourceStream));
            return list;
        }

        /// <summary>
        /// Helper function for calculating all of the drop down entries that are available
        /// in the given suite statement.  Called to calculate both the members of top-level
        /// code and class bodies.
        /// </summary>
        private static ReadOnlyCollection<DropDownEntryInfo> CalculateEntries(SuiteStatement suite) {
            List<DropDownEntryInfo> newEntries = new List<DropDownEntryInfo>();

            if (suite != null) {
                foreach (Statement stmt in suite.Statements) {
                    if (stmt is ClassDefinition || stmt is FunctionDefinition) {
                        newEntries.Add(new DropDownEntryInfo(stmt));
                    }
                }
            }

            newEntries.Sort(ComparisonFunction);
            return new ReadOnlyCollection<DropDownEntryInfo>(newEntries);
        }

        private static int ComparisonFunction(DropDownEntryInfo x, DropDownEntryInfo y) {
            return CompletionComparer.UnderscoresLast.Compare(x.Name, y.Name);
        }

        /// <summary>
        /// Calculates the members of the drop down for top-level members.
        /// </summary>
        private void CalculateTopLevelEntries() {
            PythonAst ast = _projectEntry.Tree;
            if (ast != null) {
                _topLevelEntries = CalculateEntries(ast.Body as SuiteStatement);
            }
        }

        /// <summary>
        /// Calculates the members of the drop down for nested members
        /// based upon the currently selected top-level member.
        /// </summary>
        private void CalculateNestedEntries() {
            var entries = _topLevelEntries;
            int topLevelIndex = _curTopLevelIndex;
            if (entries.Count == 0) {
                _nestedEntries = EmptyEntries;
            } else if (topLevelIndex < entries.Count) {
                var info = entries[topLevelIndex == -1 ? 0 : topLevelIndex];

                ClassDefinition klass = info.Body as ClassDefinition;
                if (klass != null) {
                    _nestedEntries = CalculateEntries(klass.Body as SuiteStatement);
                } else {
                    _nestedEntries = EmptyEntries;
                }
            }
        }

        #endregion

        #region Implementation Details

        /// <summary>
        /// Wired to parser event for when the parser has completed parsing a new tree and we need
        /// to update the navigation bar with the new data.
        /// </summary>
        private void ParserOnNewParseTree(object sender, EventArgs e) {
            var dropDownBar = _dropDownBar;
            if (dropDownBar != null) {
                _curNestedIndex = -1;
                _curTopLevelIndex = -1;
                Action callback = () => {
                    CalculateTopLevelEntries();
                    CaretPositionChanged(this, new CaretPositionChangedEventArgs(null, _textView.Caret.Position, _textView.Caret.Position));
                };
                _dispatcher.BeginInvoke(callback, DispatcherPriority.Background);
            }
        }

        /// <summary>
        /// Moves the caret to the specified index in the current snapshot.  Then updates the view port
        /// so that caret will be centered.  Finally moves focus to the text view so the user can
        /// continue typing.
        /// </summary>
        private void CenterAndFocus(int index) {
            _textView.Caret.MoveTo(new SnapshotPoint(_textView.TextBuffer.CurrentSnapshot, index));

            _textView.ViewScroller.EnsureSpanVisible(
                new SnapshotSpan(_textView.TextBuffer.CurrentSnapshot, index, 1),
                EnsureSpanVisibleOptions.AlwaysCenter
            );

            ((System.Windows.Controls.Control)_textView).Focus();
        }

        #endregion

        internal void UpdateProjectEntry(IProjectEntry newEntry) {
            if (newEntry is IPythonProjectEntry) {
                _projectEntry.OnNewParseTree -= ParserOnNewParseTree;
                _projectEntry = (IPythonProjectEntry)newEntry;
                _projectEntry.OnNewParseTree += ParserOnNewParseTree;
            }
        }
    }
}

#endif


text:
Martial law is coming? Washington debunks hoax message about coronavirus telling Americans to stockpile everything in sight
Americans have been bombarded with fake messages stating that President Donald Trump will declare martial law in days. The government had to intervene to prevent a wave of panic.
The seemingly unstoppable spread of coronavirus has already led the government to declare a national emergency over the deadly disease that has so far claimed 41 lives nationwide, and infected more than 1,600 people across the country, according to the Centers for Disease Control and Prevention (CDC).
However, certain unsavory characters apparently decided to exploit the already tense situation to stoke more fear in the hearts of Americans and provoke real panic. People across the US received text messages claiming the president is about to impose martial law in a day or two, while urging people to stockpile supplies. This comes as many shops have already reportedly run out of toilet paper among other things.
It is getting difficult to find toilet paper. pic.twitter.com/6KB4DpeZBr
— REY-SISTA💭2⃣3⃣1⃣days🌊🌊🏴☠ (@counttillbiden) March 16, 2020
The messages, citing insider information from "military friends up in DC," and warning of nothing less than a "two week mandatory quarantine for the nation," fell on fertile ground. It immediately became a hot topic on social media as people posted thousands of messages on the topic.
Some rushed to break the "bad news" or to wonder if anyone else received the disturbing message. Others said that many of their friends forwarded the messages to them.
More attentive readers noticed, however, that the messages, which were fake, referred to Trump's plan to invoke the Stafford Act as the reason for claiming martial law is coming.
In fact, the president already invoked the law two days ago when he declared a national emergency. The government unlocked additional powers and funding for disaster response and involved the Federal Emergency Management Agency (FEMA) in the fight against coronavirus – but nothing close to martial law was imposed.
Still, the impact of the hoax apparently reached such proportions that the National Security Council decided it was time to intervene, posting a statement on Twitter saying the text message rumors were fake.
However, this was not enough to convince everyone that there is no possibility of martial law being imposed in a week or two.
2020 ELECTION, BORDER PATROL, BORDER SECURITY, BORDER WALL, CDC, CENSORSHIP, CIA, CIVIL RIGHTS, CRIME, DEEP STATE, DOMESTIC TERRORISM, EU, EUROPE, FBI, GLOBALISTS, GOOGLE, GUN CONTROL, HEALTH INSURANCE, IMMIGRATION, IRAN, MEXICO, MSM, MSNBC, ONLINE CENSORSHIP, PLUTOCRATS, POLITICS, President Donald Trump, Russia, SOCIAL MEDIA, South Africa, THE MAINSTREAM MEDIA, THE UNITED NATIONS, TWITTER, U.S. ECONOMY, VIOLENCE, VOTER FRAUD, YouTube
3/16/2020, ARGENTINA, Australia, AUSTRIA, BELGIUM, BRAZIL, BRITAIN, Canada, CDC, CHINA, CORONAVIRUS, Covid-19, DENMARK, EU, FEMA, FINLAND, GERMANY, HUNGARY, INDIA, IRAQ, IRELAND, ISRAEL, ITALY, JAPAN, MARTIAL LAW, NETHERLANDS, NEW ZEALAND, Norway, PANDEMIC, PORTUGAL, Puerto Rico, QATAR, South Korea, Spain, Sweden, SWITZERLAND, U.K., VIRUS, Washington DC, WORLD HEALTH ORGANIZATION
CORONAVIRUS – Canadian Students Gather at St. Patrick's Day Party, Laugh About Spreading Coronavirus
The Democrats are weaponizing Covid-19 against Trump to do what Russiagate & impeachment could not

redpajama_set_name: RedPajamaCommonCrawl


text:
Obusier de 155 mm Modèle 50
Obusier de 155 mm Modèle 50 was a French 155 mm 30 calibre howitzer introduced in 1952.[2] The first French artillery designed since World War II, it was manufactured in both France and under license in Sweden for the Swedish armed forces. The Model 50 was replaced in French service during the 1980s by the TRF1.[2]
Obusier de 155 mm Modèle 50 in Beyt ha-Totchan Museum, Zikhron Ya'akov.
Field Howitzer
1952-1980s
See Operators
8,100 kg (17,857 lbs)
7.8 m (25 ft 7 in)[1]
4.65 m (15 ft 3 in) L/30
2.7 m (8 ft 10 in)[1]
2.5 m (8 ft 2 in)[1]
Separate loading charge and projectile[1]
interrupted screw
Hydro-pneumatic[1]
Split trail
-4°/69°
3-4 rpm[1]
Muzzle velocity
650 m/s (2,133 ft/s)
Effective firing range
18,000 m (19,685 yd)
The Model 50 has a split trail, large slotted muzzle-brake, four-wheeled bogie and a retractable firing pedestal beneath the axles.
OperatorsEdit
IDF M-50 155 mm self-propelled howitzer
France: standard howitzer of the French Army, replaced in the late 1980s by the TRF1.[2]
Sweden: 170;[3] possibly more produced under license.[2]
Israel: 170; most of these were later mounted on an M4 Sherman tank chassis as self-propelled howitzers.[3]
Lebanon: 50[3]
Morocco: 18[4]
Senegal: 6[3]
Switzerland: 20[3]
Tunisia: 30[3]
M-50 155 mm - An M4 Sherman chassis based self-propelled artillery piece mounting the Obusier de 155 mm Modèle 50 155 mm L/30 howitzer in large enclosed superstructure.
^ a b c d e f g Foss, Christopher (1977). Jane's pocket book of towed artillery. New York: Collier. p. 121. ISBN 0020806000. OCLC 911907988.
^ a b c d Kinard, Jeff. Artillery: An Illustrated History of Its Impact (2007 ed.). ABC-CLIO Publishers. pp. 301–303. ISBN 978-1-85109-561-2.
^ a b c d e f "Trade Registers". Armstrade.sipri.org. Retrieved 2014-11-20.
^ Jane's Armour and Artillery, 2002, Volume 23 p. 727.
Wikimedia Commons has media related to Model 50 155 mm howitzer.
Specifications of Model 50 155 mm howitzer
Weapons of the Arab-Israeli Wars
This artillery-related article is a stub. You can help Wikipedia by expanding it.
This Israel Defense Forces-related article is a stub. You can help Wikipedia by expanding it.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Obusier_de_155_mm_Modèle_50&oldid=892039035"


Mailboxshop24 – range of products at great prices!
Welcome to UK's specialist for letterboxes and matching accessories. Here you will find a large assortment of letterboxes from renowned brand manufacturers. Stainless steel mailboxes, stand letter boxes, mailboxes and much more - at surprisingly reasonable prices.
Professional advice on the purchase of mailboxes and a fast delivery within UK are a priority at mailbox shop24!
High quality letterboxes for your home!
Welcome to UK's specialist for letterboxes and accessories. Here you will find a large selection of well-known brand manufacturers. Buy your stainless steel mailbox, stand letter boxes, mailboxes and much more - at reasonable prices. Within England we ship our items free of charge!
In our Mailbox shop you will find a wide selection of letterboxes and letterbox systems made from stainless steel, plastic and other materials, as well as accessories, such as Mailbox stands or Name Plates. Our products are characterized by top quality and favorable prices. Our mailboxes are available in the following colours: Anthracite, White, Green, Red, Black, Brown, Silver and Grey.
Our unique mailboxes offer plenty of space for mail, letters and newspapers, as well as embellish the entrance area.
If you want to buy a new mailbox, you need to be clear about your needs first: Will the mailbox be Steel, Stainless Steel or Plastic? Do you set great value on design or look for a mailbox with a newspaper box? Should it be a wall-mail box or do you prefer a stand mailbox? Or should you opt for a US mailbox in American style?
Need one newspaper box? At mailbox shop24 you will find letter boxes with newspaper compartment and mailbox accessories according to your wishes.
Do you have anymore questions? Before you decide, you can also have extensive and non-binding advice.
If you buy your mailbox from us, you could also benefit from fast and free delivery within England.
What exactly makes a good mailbox?
A mailbox is used for the safe storage of mailings. One distinguishes between postal mail boxes, which serve the sending of mail, and house mail boxes. On Mailbox Shop 24 you will find a large selection of house mailboxes for the reception of your private mail. Remember: It is the responsibility of the homeowner to set up a freely accessible mailbox with a letter and storage compartment. There are quite a few things to consider when buying a mailbox.
A house mailbox or private mail box is a mail box installed at or in the house, which is intended to make it easier for the postal worker to send letters, postcards or other mailings to the recipient. In this case, the mailbox can be mounted on the house wall, placed on the fence or on a mailbox stand on the front of the property, or even an insertion slot in the front door. Often, private mailboxes are also allowed in the exterior wall or in multi-party houses in the house floor.
European standard EN 13724 regulates the exact nature of letterboxes. Among other things, a standard mailbox has to accommodate at least one envelope in the paper format C4 (DIN A4 envelopes). This must be inserted easily and without damage, without kinking or folding it. If this standard is not met in a tenement house, this can be a reason for rent reduction as confirmed in the past by courts.


text:
Jakks Pacific World of Nintendo- The Legend of Zelda Microland playsets!
On November 29, 2016 November 29, 2016 By RyanIn Action Figures, Collecting, Game Boy, Gaming/Computing, Mighty Max Playsets, NES, Nintendo, Playset, Uncategorized, Zelda
There was a point in my life when I was about seven of eight when nothing would have made me happier than owning some Legend of Zelda toys. I often imagined them, what they would look like and what game features could be taken from the games and made into plastic form. I envisioned a Might Max-esque playset, perhaps with a little wall you could 'blast' open with bombs, or with a gravestone you could push to reveal a treasure or a Poe or something.
Sadly this wasn't to be. Apart from a few Ocarina of Time action figures that I had heard about but never seen, there were no Zelda toys widely available in the UK. I had to make do with using Lego or Plasticine to have Zelda adventures without using a games console.
Fast forward eighteen years later and there is now so much Zelda merchandise available to kids that my eight year old self would probably have turned as green as Link's tunic if I had known what would be available when I was no longer a kid and would be theoretically now too old too appreciate Zelda toys.
Luckily for me, the time to appreciate Zelda toys has not yet passed, so I decided to take a look at the closest thing available to the toys I imagined back then; Jakks Pacific Zelda Micro playsets!
These toys are all based on the The Wind Waker video game (first released on the Nintendo Gamecube in 2002). At the time I didn't appreciate the game a great deal as I found the cell shaded cartoonish art style to be somewhat childish. After replaying it a few years later, I had new found appreciation for it. The music was fantastic, the gameplay was tight and felt a lot more fluid than previous titles. Even fifteen years later the graphics hold up surprisingly well just because of the art style, and it feels refreshing to play a Zelda game in a bright and colourful world instead of the often drab and gloomy pallet found in some of the other titles. The best part for me was probably traversing the ocean in a boat and having a whole world full of islands to discover and explore. It felt like an entirely new concept in a Zelda game and still feels pretty fresh now; the only other game that I can think of where you captain a sea vessel is Assassins Creed IV. Anyway, though I am not reviewing the game, The Wind Waker was a damn good one!
So these toys are all based on locations from the Wind Waker. The first one I shall look at is Outset Island, the place where the game starts off.
I have covered Jakks Pacific before (here and here) and their contribution to making toys based on Nintendo games. For the most part, they do a good job but I am usually too much of a finicky bitch to have been totally satisfied with anything that they have made yet, and these playsets are no exception. The idea with these are they are meant to work like a jigsaw puzzle, 'clipping' together so you can display and play with them however you want them. It's a fun little idea but unless you own a few of these then there really isn't much point.
Also, Outset island! If you have played the game you will know it is a fun and vibrant little place but there isn't much there. It's a quiet little village on a quiet little island. Do kids really want to re-enact that time that Link walked alone on a beach? Well some might. But I'm guessing most would rather be playing in some tomb, fighting off those zombies that scream at you and then hump your back if you get too close to them.
Outset Island comes in three parts, a jigsaw base with a hut on it, a jigsaw base with nothing on it and a jigsaw base with a treasure chest and a palm tree on. The hut door opens and so does the treasure chest lid.
Now I don't like to compare stuff to toys from years ago (I'm lying, I fucking love it) but the Mighty Max playsets had similar things to opening doors and treasure chests in it's series. Only behind a MM door you would find a corpse nailed to the other side, who had been strangled to death with his own intestines after being viciously ravaged by a cyborg demon. Or something similar. Now I know Outset Island isn't a hellish Mighty Max landscape, but could they really have not come up with something more exciting than a hut, a tree and a treasure chest? It's Zelda for goodness sake! There is nothing even inside the hut.
What adds to my annoyance is that Link is made of that rubbery, bendy type of plastic and refuses to stand up whenever you try and position him, so you have to get him to lean against the door or something. It's okay I guess. It's just not the Zelda playset I waited nearly two decades for!
The second Zelda set is the Open Ocean set. And it's worse than the first.
This set comes with Tetra and is comprised of three 'jigsaw' parts like the first. One has nothing on it, one has a little pier and one has a little viewing platform on it. I don't know if it's it's an intentional design or just the plastic they use, but the platform is kind of warped which makes it hard to stand Tetra on it.
The pier can be raised up and down which is the only feature this set has. That's pretty much this set. Booooooring.
The final set is Hyrule Castle and it's a little bit more interesting. But not loads.
Again, it's just three separate pieces that clip together. A blank one, one with a treasure chest and one with a door.
The neat thing about the door is that it has a little lever on the side and if you slide it up and down you can open and close the door. It's a fun little gimmick and is great for crushing Tetra, a character I never really warmed to whilst playing the Wind Waker.
The treasure chest also opens but like the other, there isn't anything in it which is kind of boring. I feel like they could have done so much more with these sets had they really tried. And I'm not just being a nostalgic asshole who just likes stuff from my childhood (though I am mostly being that). I really think toy companies today could learn a lot if they just went and looked at stuff from a decade or so ago, at what made toys fun because there just aren't many fun features put into toys I see these days which don't require batteries.
The figures are all very basic and are not in any way articulate but are good enough, and are fairly detailed seeing as they are such a small size. It's just Link and Tetra refuse to stand up most of the time.
Overall, the sets are okay. They just aren't brilliant. They are a lot more fun when connected together which is the idea with these, but I feel that if a kid only had enough money for one set then it's going to be a pretty boring playtime experience with just one figure included. I think it must be a sales strategy employed by toy companies because when I was a kid you often got bigger playsets say on the box "Action figures not included". That was fine, but smaller sets like Micro Machines or Mighty Max always had an accompanying assortment of little figures to go with the sets. These days they don't. Even Star Wars Micro Machines playsets (which have made a resurgence) come with just one figure and one vehicle now, where as they would usually come with four or five figures and a vehicle. I guess the idea is so that you will have to go and buy the figures separately. Which is what I had to do.
But they aren't cheap. They come as a three pack, and at £5-£10 each, I really resent having to pay that. Especially as the one pack comes with a Link figure which I already own because of the Outset island set! I only got these two sets as I had a voucher for amazon, and the third set comes with the King of Hyrule, Tetra and Ganon. I would have liked to have owned the King as well, but wouldn't pay that amount of money for one small figure when I have the other two.
Adding more figures to the playsets does make a scene look more interesting and fun but the figures should have been with the sets anyway seeing as they aren't even that cheap in the first place.
There are a couple of other Zelda sets which are apparently 'deluxe' ones. I might pick one of 'em up in the future if I can find any at a decent price. There is also a whole load of Mario ones, which I think look much better as Mario started off as a 2d side-scrolling game, which lends well to clipping together different sets to make one long 'level'. They aren't as easy to find in the UK though and I am not prepared to fork out big importing any, so I guess I won't be reviewing them anytime soon!
Anyway, if you like Zelda a whole lot and you also like little playsets, you might like these. Or you might get pissed off about them. I am somewhere in-between. They're okay, they just certainly aren't the Zelda Micro playsets that I imagined as a kid.
action figurefunGamingjakks pacifickidsPlaysetreviewThe Legend of ZeldaThe Legend of Zelda microtoywind wakerZelda
Tomy 'Pocket Arcade' Teenage Mutant Ninja (Hero) Turtles wind up handheld games! 1990!
Magic Snow! Just add water!


text:
Hammock: Procession/Love in the Void
Nashville atmospheric post rockers, Hammock, have revealed the double single, Procession w/ Love In The Void, the two tracks which comprise the opening moments of their anticipated new album, Love in the Void.
The renowned duo once again delivers a compelling listen, and the accompanying video creates a mesmerizing parallel to the enchanting atmosphere of the music.
Regarding the singles and the music video, Marc Byrd of Hammock says: "Procession is the opening ceremony leading into the title track, Love In the Void. The last section of Love In the Void is probably the heaviest ending of any song we've ever done. The video captures this perfectly. It looks and feels like a weighted beauty… like the whole catastrophe. The procession of the big bang evolving into love in the void. It's the forward movement of life, of yearning… the forward movement towards love. David Altobelli made a masterpiece with this video."
Love in the Void comes out on January 27th, 2023.
Love in the Void by Hammock
Hammock Bandcamp | Spotify | Facebook | Twitter | Instagram
hammock music post rock zr


text:
<?php

namespace Magento\Multishipping\Test\Page;

use Magento\Mtf\Client\Locator;
use Magento\Mtf\Factory\Factory;
use Magento\Mtf\Page\Page;

/**
 * Create Shipping Address page.
 */
class MultishippingCheckoutAddressNewShipping extends Page
{
    /**
     * URL for new shipping address page.
     */
    const MCA = 'multishipping/checkout_address/newShipping';

    /**
     * Form for edit customer address.
     *
     * @var string
     */
    protected $editBlock = '#form-validate';

    /**
     * Init page. Set page url.
     *
     * @return void
     */
    protected function initUrl()
    {
        $this->url = $_ENV['app_frontend_url'] . self::MCA;
    }

    /**
     * Get form for edit customer address.
     *
     * @return \Magento\Customer\Test\Block\Address\Edit
     */
    public function getEditBlock()
    {
        return Factory::getBlockFactory()->getMagentoCustomerAddressEdit(
            $this->browser->find($this->editBlock, Locator::SELECTOR_CSS)
        );
    }
}

redpajama_set_name: RedPajamaGithub


ROAR's Community Advisory Board offers diverse input and supports organizational accountability related to program development, staffing, budget oversight, and fundraising. If you are a food system stakeholder (and all of us are!) with energy and ideas, please let us know if you'd like to join the #roarboard.


So, we've jumped on the bandwagon as it's so popular now, and obvs we believe in unicorns too! We've created 2 Unicorn style cakes. Our 'Do you believe in unicorns cake?' which is our signature drippy style, any sponge flavour you like, coated in a rainbow of buttercream, dripped with chocolate ganache and topped with your fave treats. Or you can get our 'Unihorn forever' cake, which has unicorn ears and a horn topper, with closed eyes on the front of the cake. We've kept this style simpler but obvs added extra sparkle with edible glitter.You can either order our 'Do you believe in unicorns cake' or 'Unihorn forever' cake by sending us an email to info@blondieskitchen.co.uk.
Blondies Kitchen is the collaboration of two professionally trained chefs who love to invent and test recipes to keep them on trend. Their instagram features the most mouth-watering concoctions of unicorn cakes, pancake stacks and of course their speciality cookies. Want to know what happens when you follow your dreams? Read more here!


Santa Claus is coming to town! With the big, jolly guy on his way, we know it's time to wrap up the gifts on our lists. Family gatherings, office parties or the Secret Santa exchange are all perfect reasons to have flowers delivered. Everyone enjoys knowing someone is thinking about them. Christmas is a great time to remind people how much they mean to you.
Here in Bakersfield, CA, we are ready for Christmas. We want to make your holiday season the best one yet. When you have flowers delivered, it is our opportunity to be Santa's helpers! Whether you don't know what to buy someone for Secret Santa, or you have that special someone who you want to know you care, flower delivery is a wonderful option. You can send a note alongside your arrangement or leave your recipient in anticipation as to who their Secret Santa is.
At Conroy's Flowers Bakersfield, we recommend our Glorious Christmas flower arrangement! The white roses and burgundy tones are sure to bring warmth and festivity into the lives of those that receive it. Sweep those special people in your life off of their feet with this bouquet's gold accents and the ornaments that lay on the base of the bouquet's vase.
Santa delivers gifts one day of the year, but Conroy's Flowers Bakersfield delivers gifts all year round. Here in Bakersfield, CA, it is no secret that flowers are one of Santa's favorite gifts to give.


Natalie Gross & Callie Schaffer, qualified for State Golf Meet!
Trevor Brangham takes a handoff from Ethan Farlee during their relay race.
Boys: 21. Jayce Lawrence, Timber Lake, 110; 22. Dixon Booth, Timber Lake, 111.
The Cheyenne River Sioux Tribal Council honored the TLHS boys basketball team on their fifth place finish at the State B Boys Basketball Tournament during council session on Friday, May 4. CRST Chairman Harold Frazier and council members praised their hard work and discipline and reminded them that they are role models for younger siblings and other students. Ivan Looking Elk gave a prayer for the team, and each player received a gift. Coach Cody Lawrence received a star quilt from the players' parents. Parent Janna Bollinger noted that the team also received the SD High School Activities Assn. Academic Achievement Team Award for achieving a grade point average of 3.0 or better.
Timber Lake senior Loryn Schoelerman has been named to the 2018 Class B Girls All-State Basketball Team by the South Dakota Basketball Coaches Association.
Schoelerman, who led the Lady Panthers through a 16-6 overall season that ended in the Round of 16, was a third team selection.
Loryn scored 16.4 points per game and grabbed 9.2 rebounds. She also averaged 1.8 steals and 1.3 blocks per game. Schoelerman was also a leader on last year's team that appeared in the Class B tourney, where she was named to the all-tournament team. She is a multiple allconference and all-district selection.


text:
Q: How can I automatically switch my VMs' bridged adapters between eth0 and wlan0 depending on what's active? In Virtualbox, I have a bunch of virtual machines. The host is a Debian laptop that frequently switches between a wired and a wireless connection. Every time I go wireless (or go wired), I have to change the Virtualbox settings of each virtual machine from eth0 to wlan0 (or the other way around) to have the guests connect to the network. How can I make this switch automatic?

A: It is possible to change the type of the virtual network interface with a command like:
VBoxManage controlvm <VM_name> nic1 bridged eth0

This will make the first virtual interface in this VM be bridged to eth0. However, it only works when the guest is running. (I'm not sure exactly when it will update the persistent configuration, but some testing has shown that the command does nothing if the guest is not running, but if it is, it both changes the immediate state of the interface and updates the configuration.)
But it can be made to work if you have something running it frequently, specifying the interface you want to bridge to. You can use my NCD programming language to do this automatically. The NCD program below will observe the state of eth0 and wlan0, and will repeatedly invoke a command like above to make sure your VM is bridged the right interface. (in particular, the one which has the RUNNING flag; e.g. for wired interfaces this means that the cable is plugged in)
process vbox_iface {
    # Wait for link on either eth0 or wlan0. Prefer eth0.
    multidepend({"link-eth0", "link-wlan0"}) linkif;

    println("Using ", linkif.dev);

    # Enter loop (this is a hackish loop).
    multiprovide("loop-run");
    multidepend({"loop-again", "loop-run"});

    println("Setting bridged to ", linkif.dev);

    # Set VM NIC config.
    runonce({"/usr/bin/VBoxManage", "controlvm", "Windows XP", "nic1", "bridged", linkif.dev});

    # Wait some time (in milliseconds).
    sleep("2000", "0");

    # Continue loop.
    multiprovide("loop-again");
}

process lan_iface {
    var("eth0") dev;

    # Wait for device to appear and for link (e.g. cable).
    net.backend.waitdevice(dev);
    net.backend.waitlink(dev);

    multiprovide("link-eth0");
}

process wlan_iface {
    var("wlan0") dev;

    # Wait for device to appear and for link (e.g. cable).
    net.backend.waitdevice(dev);
    net.backend.waitlink(dev);

    multiprovide("link-wlan0");
}

You can use the above program by running (as your user account, not root):
badvpn-ncd --loglevel warning --config-file <file_with_above_script.ncd>

Be sure to adjust the interface names in the script, and the VM name. Once you have verified that it works, you can configure your desktop environment to autostart the badvpn-ncd process.

redpajama_set_name: RedPajamaStackExchange


text:
NBA: Milwaukee Bucks beat Golden State Warriors despite poor shooting
Giannis Antetokounmpo of the Milwaukee Bucks goes up for a slam dunk during an NBA basketball game against the Golden State Warriors on Jan 08, 2020 in San Francisco.PHOTO: AFP
https://str.sg/JqYN
LOS ANGELES (REUTERS) - The Milwaukee Bucks used a stellar defensive effort to overcome poor shooting on Wednesday night (Jan 8), struggling past host Golden State 107-98 on a night when Warriors coach Steve Kerr resorted to a late hack-a-Giannis strategy.
Two days after shooting 15-for-45 on three-pointers in a 126-104 loss at San Antonio, the Bucks were dreadful from behind the line - 9-for-41 - but still managed a sixth win in their last seven games.
Giannis Antetokounmpo had 30 points, and Khris Middleton 21 for the Bucks, who won for the third straight time at Golden State, this time in their first visit to the new Chase Centre in San Francisco.
After being held to a 19-all tie through one quarter, the Bucks never trailed over the final 36 minutes, but also never created a comfortable margin over the Warriors, the Western Conference's last-place team.
Antetokounmpo gave Milwaukee a rare double-digit lead at 99-88 when he converted an alley-oop into a dunk with 3:26 left, before Kerr called upon his team to foul the reigning Most Valuable Player on two consecutive possessions.
Antetokounmpo missed two of the four free throws, then air-balled a three-point attempt, helping Golden State reclaim possession trailing 101-96 with still 1:30 to go.
But defence saved the Bucks, as the Warriors went from the 2:30 mark to 27.0 seconds remaining without a field goal, allowing Milwaukee to hold on.
Antetokounmpo hit nine of his 14 two-point shots, but was not nearly as good on three-pointers (1-for-7) or at the free throw line (9-for-13). He also found time for a game-high 12 rebounds.
Eric Bledsoe added 16 points, and Brook Lopez 12 for the Bucks, the NBA's top team with 33 wins.
NBA: San Antonio Spurs shock Milwaukee Bucks behind three-point barrage
Alec Burks led six Warriors in double figures with 19 points on a night when Golden State shot 15-for-38 on three-pointers and outscored the Bucks 45-27 from beyond the arc.
Glenn Robinson III and Damion Lee had 15 apiece, Omari Spellman had 11, and Willie Cauley-Stein and Alen Smailagic scored 10 each for the Warriors, whose loss was their 30th of the season.
Cauley-Stein completed a double-double with a team-high 11 rebounds.
Overall, the Bucks outshot the Warriors overall 40.2 per cent to 37.9.


At the early design phase of Kozloduy NPP, probable emergency scenarios were analyzed and every possible measure to prevent them has been implemented. WWER reactor types have proven reliability in all operating modes.
In spite of the low probability of occurrence, the required technical means for coping with such situations have been identified and organizational measures have been planned to ensure protection of staff and population and for preventing environment pollution. The organization and technical measures are regulated in the Emergency Plan, elaborated in compliance with the national legislation and the International Atomic Energy Agency requirements. In order to maintain the staff preparedness to respond in possible emergency situations, emergency exercises are conducted on yearly basis which verify the coordination of the joint activities with the regional and national structures of the Nuclear Regulatory Agency, Directorate General Fire Safety and Civil Protection (FSCP) at the Ministry of Interior and the Regional Directorates of FSCP in Vratsa and Montana, Ministry of Economy, Energy and Tourism, etc.
We would like to offer to your attention the video "Emergency Preparedness – a Guarantee for Confidence" (available in Bulgarian) and information for protective measures and rules for conduct of population in case of increased radioactivity.


Generators There are 2 products.
Please be aware: This item is available for free click and collect from our Tickhill, Epworth or Bakewell branch or palletised delivery from £56* to Mainland U.K. only. A single cylinder, 4 stroke petrol generator, ideal for industrial applications or home backup use.


text:
{% extends 'teacher/teacher_education/base.html' %}

{% load i18n %}
{% load url from future %}

{% block content %}

    {% trans "Delete This Teacher Education?" %}

  {% include 'teacher/teacher_education/object_table_detail.html' %}
  <form action='{% url "teacher_teacher_education_delete" pk=object.pk %}' charset='utf-8' method='post'>
    <fieldset>
      {% csrf_token %}

        <button class='btn btn-danger' type='submit'>
          {% trans "Delete" %}
        </button>

    </fieldset>
  </form>

{% endblock %}


The flexible working for parents of children under the Age of 18 Regulations have been revoked. The coalition government announced in March 2011 that this extension would be scrapped in order to include growth by removing red tape for business. The right to request flexible working remains for parents of children under the age of 17 (or under 18 if the child is disabled).


text:
package com.shaojun.widget.tablayout.listener;

import android.support.annotation.DrawableRes;

public interface CustomTabEntity {
    String getTabTitle();

    @DrawableRes
    int getTabSelectedIcon();

    @DrawableRes
    int getTabUnselectedIcon();
}


An American artist (want to be) living and working on the beautiful, friendly island of Taiwan. I was a pilot for more than twenty years and believe it or not it is having an effect on my sketching. I want my sketches to be free, fluid, expressive, but I find myself paying too much attention to detail and trying to be precise with my lines and angles. I believe this is a result of my flying airplanes for so long-where you can get into trouble real quick if you are not precise about what you do. Anyhow, I'm trying to train myself to loosen up. We'll see what happens as my blog progresses. Any thoughts on this problem would be welcomed with open arms.


Thank you very much for all the submitted abstracts!
The registration will open soon.
I am very pleased to announce the XLVI ESAO 2019 Meeting to be held in the modern and beautiful city of Hannover during September 3-7, 2019.
The key objective of ESAO 2019 is to promote advances in science and technology for the benefit of human health and contribute to the evolution of medical care. ESAO 2019 provides a unique platform for multidisciplinary discussions from different perspectives and will foster interdisciplinary collaborations in engineering, physical, biological and medical sciences. ESAO 2019 is the kind of International Congress that brings together not only researchers, scientists and clinicians but also industries over the world to interact and share of ideas, knowledge, experience, and research findings.
The motto of ESAO 2019 is 'Smartificial Devices for our Future'. Our programme will include specific sessions, workshops and symposia in artificial and biohybrid technologies and discoveries, clinical trials, regulatory approval of new devices, scaling up, commercialisation, ageing society, career development of young investigators in yESAO, women leadership, education, and outreach. Keynote lectures given by world leaders and experts in artificial organ development will be the highlight of the conference.
Our Welcome Reception, Get Together and Congress Dinner will provide the perfect atmosphere for catching up with old friends and making new ones. Our local Organizing Committee is doing everything possible to make ESAO 2019 a great success.
We look forward to welcoming you all in Hannover, Germany, for an excellent ESAO 2019 meeting.
On behalf of the European Society for Artificial Organs (ESAO), it is my great pleasure to invite you to participate in the 46th Annual ESAO Congress that will be held in Hannover, on September 3-7, 2019.
The motto of the congress organized by Prof. Birgit Glasmacher and her team is "Smartificial devices for our future". Since its creation, the members of our society have been involved in the development of artificial organs. Some of them are on the market, and often offer the patients a bridge to transplantation, when they are on waiting list, or allow the efficient replacement of lost functions in acute or chronic organ failure.
With the progress of basic science, but also of technology, these artificial organs will become smarter and smarter: miniaturization, remote control, biohybrid systems will lead to incremental innovation or brand novel devices, sometimes considered as "advanced therapies". These different approaches will have to face new challenges, such as the implementation of new regulations, or the questions of the society regarding the "augmented" human beings.
Attending the ESAO congress will allow you to present your last R&D studies, to participate to open discussion bringing together clinicians, researchers and engineers from public or private structures, or even to learn more about these "smartificial" organs.
For all of these reasons, I look forward to meeting you in Hannover, where we will have also the opportunity to share nice moments during the social events.


The story of the Purple Bus. This book is based on a true story of the band called Men Without Shame and their infamous Purple Bus with yellow sunglasses making the journey to a classic rock festival near Minnedosa, Manitoba. The band meets their musical heroes and have to overcome their insecurities as they share the stage with giants of the music business for the first time. Lots of actual photos are used to illustrate. A fun read for kids and adults alike.


text:
John E. Luth
Chairman, President & CEO, Seabury Capital Group LLC
John Luth is Chairman, President & CEO of Seabury Capital Group, founded in 1995, which holds investment banking, asset management, software and trade finance firms. Seabury has executed over 1,600 engagements for 300+ clients in more than 50 countries. Mr. Luth is also Vice Chairman & CEO of Seabury Capital Management LLC which owns a number of investment funds and asset-backed portfolio businesses.
Mr. Luth has advised on more than $150B equity, debt and lease placements/restructurings and over $300B in aircraft orders. Most recently Mr. Luth advised Avianca Holdings SA on a $2.0B DIP financing (2020) in its Chapter 11 proceeding as its lead investment banker and arranged $2.7B of equity and debt exit financing (2021). Mr. Luth also lead a team that arranged a $325M convertible note placement for Azul Airlines (2020).
Mr. Luth was CFO & CIO of Continental Airlines. Prior to Continental, he served as VP, Syndications at Manufacturers Hanover Trust Company. Prior to that, he served in the Corporate Finance Division of Exxon Corporation. Mr. Luth holds A.B. in Economics magna cum laude from the College of the Holy Cross (1974) and an M.B.A. in Finance from the Wharton Graduate School of the University of Pennsylvania (1976). He is a FINRA Registered Principal, and is Series 7, 63, 79 and 24 qualified, and is also FCA (UK) licensed. He serves on the Advisory Board of Holy Cross and was a Trustee from 2005-2013.
Margaret L. Chan
Senior Managing Director, Financial Asset Management and Financial Services & Trading
President & Chief Operating Officer, Seabury International Holdings Inc.
Margaret Chan is President & Chief Operating Officer of Seabury International Holdings Inc. Ms. Chan joined Seabury in 2001 as head of Seabury's office in Los Angeles and has been responsible for overseeing the operations of the firm's Structured Financial products, Specialty Finance and Financial Solutions.
Ms. Chan has been engaged by multinationals and private equity funds in sourcing investment opportunities and structuring transactions both domestically and in Asia, involving industries such as technology, media, insurance, finance and manufacturing. She specializes in originating, structuring and funding activities for high-yielding, low-risk, asset-backed instruments. Ms. Chan has more than 38 years of experience in diverse public and private transactions.
Michael B. Cox
Senior Managing Director, Seabury Securities
Michael B. Cox is Senior Managing Director, Corporate Advisory & Investment Banking. Mr. Cox joined Seabury as a partner in Seabury's principal advisory practice in April 1998. He has over 30 years of corporate and advisory experience covering corporate recovery, cash management, business planning and crisis management. At Seabury, Mr. Cox has advised numerous airline and helicopter clients on a variety of projects, including
airline treasury, corporate finance, and airline restructuring. In addition, Mr. Cox has been qualified as an industry expert in various commercial disputes involving aircraft leasing matters, airline valuations and business plans for the passenger, helicopter and cargo sector.
Patrick Henry Dowling
Senior Managing Director, Seabury Capital Management
Patrick Henry Dowling is Senior Managing Director for Seabury Capital Management focusing on the Aviation, A&D and Transportation industries. He has over 40 years' experience in the finance/equity industry and was previously a partner with Massif Partners.
Mr. Dowling has been involved in over $20 billion in acquisitions, equity investments and debt financings in the Financial Services, Transportation (A&D, Trucking, Logistics, Rail, Intermodal and Marine), and Commercial Real Estate industries.
Mr. Dowling is a CPA and has a BS in accounting from Fordham University plus a JD from Pace University School of Law. He is a FINRA Registered Principal and is Series 7 & 24 qualified. He is on the Board of Directors for the U.S. Chamber of Commerce Foundation and the USO of Metropolitan of New York.
Werner Schmidt
Non-Executive Chairman, Seabury Capital LLC & Seabury Capital Management LLC
Mr. Schmidt has been designated to serve as Non-Executive Chairman of Seabury Capital LLC and its parent company, Seabury Capital Management LLC ("SCM") which is Seabury's newly formed investment management company. Previously, Mr. Schmidt served on the board of directors of Seabury Deutschland GmbH from 2003 to 2008. Mr. Schmidt is focused on supporting Seabury's new fund management businesses as well as an expansion of Seabury's investment banking businesses.
Over the past 20 years, Mr. Schmidt has built a personal fortune of significant size through financial entrepreneurship, banking, mining and minerals trading, investments in precious stones and diamonds, art, real estate and other areas. Mr. Schmidt is CEO and sole owner of SouthCapital Holding, a private holding company for much of Mr. Schmidt's private wealth businesses.
Professionals A-Z


text:
Q: iOS Safari shows "Error" for  element; but same html works on Mac Safari This html works on all browsers/devices except Safari/iOS:
<audio controls="" type="audio/mp4" src="/audio/Quercus%20robur.m4a"></audio>

The controls are shown, except it says Error instead of a play control:

It even works on Chrome/iOS as well as Safari/Mac! I'd like it to work on Safari as I have PWA'd my app.
What can I do?


text:
Q: I am getting the "Must declare the scalar variable "@Val1"" error when inserting the record using C# When I am running the following code
        if (NewButtonClicked == true) {
            string sql = "SELECT MAX(location_id)+1 FROM locations";
            OdbcCommand my_odbc_cmd = new OdbcCommand(sql, my_odbc_connection);
            OdbcDataReader my_data_reader;
            int new_id = 0;
            my_data_reader = my_odbc_cmd.ExecuteReader();
            if (my_data_reader.HasRows)
            {
                my_data_reader.Read();
                new_id = (int)my_data_reader[0];
            }
            my_data_reader.Close();
            textBoxLocationID.Text = new_id.ToString();
            sql = "INSERT INTO locations (location_id,location,latitude,longitude,city,"
                + "state_province,country,continent) VALUES (@Val1,'@Val2',@Val3,@Val4,'@Val5','@Val6','@Val7','@Val8')";
            my_odbc_cmd.Connection = my_odbc_connection;
            my_odbc_cmd.CommandText = sql;
            my_odbc_cmd.Parameters.AddWithValue("@Val1", new_id);
            my_odbc_cmd.Parameters.AddWithValue("@Val2", textBoxName.Text);
            my_odbc_cmd.Parameters.AddWithValue("@Val3", textBoxLatitude.Text);
            my_odbc_cmd.Parameters.AddWithValue("@Val4", textBoxLongitude.Text);
            my_odbc_cmd.Parameters.AddWithValue("@Val5", textBoxCity.Text);
            my_odbc_cmd.Parameters.AddWithValue("@Val6", textBoxState_Province.Text);
            my_odbc_cmd.Parameters.AddWithValue("@Val7", textBoxCountry.Text);
            my_odbc_cmd.Parameters.AddWithValue("@Val8", textBoxContinent.Text);

            my_odbc_cmd.CommandType = CommandType.Text;
            my_odbc_cmd.ExecuteNonQuery();
        }

It is giving me "Must declare the scalar variable "@Val1"" when the execution is reached at:
my_odbc_cmd.ExecuteNonQuery();

How can I solve this error. Can anyone help me? Database used at the backend is SQL Server 2008 R2. I am using the ODBC connection to connect to the database.

A: This probably means that new_id is null. Parameters with a value of null are not sent. You need to pass DBNull.Value instead. Crazy but true.
my_odbc_cmd.Parameters.AddWithValue("@Val1", ((object)new_id) ?? DBNull.Value);

Also: '@Val2' (and similar) are very wrong. You almost certainly mean just @Val2, no quotes.

A: According to the "Working with Parameter Placeholders" section on the MSDN page Configuring Parameters and Parameter Data Types, the Odbc datasource supports only positional parameters via ? in the query text, not named parameters (such as @Val1), which are supported only by SqlClient.
Additionally as Marc Gravell indicates, you shouldn't be quoting the parameters in your query.
Try changing your SQL to:
sql = "INSERT INTO locations (location_id,location,latitude,longitude,city,"
            + "state_province,country,continent) VALUES (?,?,?,?,?,?,?,?)";


TIP! It is better to make your videos too short, leaving the viewer wanting more, than to make them too long. The majority of people aren't going to watch long videos; therefore, you need to provide them with the desired information quickly.
Online video is the latest frontier in marketing. Anybody can grab a camera and shoot a video on the spot. People all over the world can watch and share videos. If you wish to start video marketing, then you'll need to know these tips.
Keep your marketing videos short and sweet. By keeping your videos short, people can quickly find the information they are looking for. If you need a long video, think about spreading it over several shorter chapter style installments.
Include a screenshot of your website in your video. This will give people watching the video an idea of what your website looks like. Screenshots also can be used when showing a how-to video. Just save the screenshot and edit it into your video.
When it comes to video marketing, creating the video itself is only half the battle. You are also responsible for promoting your own video to gain exposure. Applying the best marketing strategies will ensure that you have better click-through rates. Include quality information, but don't be shy about letting others know what you have done.
Try to stay on topic and keep focused with each video. It is easy to stray away from your topic if you don't come prepared. Using a guide to help keep you on track and focused can really be a lifesaver. Being focused is going to help you have video marketing success.
TIP! Employ the help of friends and family if you need it. It can be difficult to come up with interesting ideas and angles for ongoing video marketing.
If you want people to purchase something, it is important to have a visible and working link. It's a good idea to have the link play within the video player. You will keep your links with your video.
TIP! If videos are not your thing, you can make it so others make them for you. Have a contest with customers to make the best video.
Make sure your content is considered interesting. Make your video really pack a punch. Placing your videos on YouTube is sure to boost traffic, but if the video is boring, it will not do much good. Folks like engaging content that contains solid information. If you have interesting videos you will get more viewers.
TIP! Once you have stats and comments on the videos you have up, create more videos. Use what you have learned to improve.
If you work with some colleagues or employees, get them involved in your video marketing campaign. Your video spokesperson must speak clearly, project a trustworthy air and be at ease in front of the camera. If you can, use more than one colleague.
TIP! A YouTube video is not going to take off on its own. It takes a great deal of marketing on your part to get them there.
Always request something of your loyal viewers when publishing a video online. Use the "call to action" technique at the end of each video. For example, if you want your viewers to sign up for a newsletter, ask them to click the link that you provide in the video description. Just make sure that it is easy for your viewers to find.
TIP! Create a video contest to pass the work on to your readers. These can be funny or serious, depending on what your users want to do.
Now that you're pretty familiar with video marketing, you'll be able to start working on the marketing campaign you have in mind. Keep in mind what you've learned here and try it out. You'll see great results if you do, so get out there and start working on your video marketing!


What do you get when running in front of a car? …. Tired!
What do you get when running behind a car? …. Exhausted!
Last year I entered the ING Miami Marathon. Within minutes after the race started I was the last of the runners. It was embarrassing. The guy who was in front of me, second to last, was taunting me. He said, "Hey buddy, how does it feel to be last?" I replied: "Do you want to know?" and I dropped out.


text:
Junior solicitor struck off for leaving briefcase of confidential documents on train represented herself at hearing
16 Apr 2020 / regulation Print
Pro-bono appeal help offers to struck-off junior solicitor
Concerned lawyers in England are offering pro bono advice to a struck-off junior solicitor if she wishes to appeal a Solicitors Regulation Authority decision.
However, former Capsticks solicitor Claire Matthews has not responded to attempts to contact her, though the 21-day appeal deadline is looming after the 6 April decision.
The junior solicitor was hauled before a disciplinary tribunal after she accidentally left a briefcase containing important documents on a train.
She had put the files into a borrowed briefcase intending to work from home overnight.
However, Matthews fell asleep on the train home from Birmingham to Cheltenham, and forgot the briefcase, which was never found.
Panicked
She told a disciplinary hearing that she initially panicked and then lied to colleagues that she had left the briefcase at home.
A week later, she admitted the loss, but said the briefcase had been left on a train just that morning.
At the tribunal, Matthews pleaded to be let continue her career, explaining that she was "overcome by uncontrollable fear, anxiety and panic" after the initial loss of the documents.
Matthews said that she remembered little about the days immediately following the loss of the briefcase on 24 May 2018.
She described it as the darkest period of her life – she barely ate, slept or showered and drank alcohol to excess in order block out the event.
She also attempted to end her life, and the SRA heard that she had a history of depression, anxiety and alcohol misuse.
However, the SRA said these factors did not excuse dishonesty in a solicitor.
The Solicitors Disciplinary Tribunal banned her from the profession, and said she had acted dishonestly by concealing the loss from colleagues.
The SRA was represented at the hearing by a barrister instructed by Fieldfisher. Matthews was without representation.
The profession's regulator also claimed Stg £55,000 in costs following the decision, reduced to Stg £10,000 when it was shown that Matthews subsequently earned Stg £9 an hour in a temporary call-centre job.
The case led to debate about the severity of the sanction against Matthews, and a number of senior lawyers offered to help her with an appeal.
Many barristers and solicitors took to social media to offer their support in any challenge against the tribunal decision.
One firm has lined up preliminary advice from a barrister, and said it was particularly concerned that Matthews had not been represented at the initial hearing.
Content related to regulation
Jump in number of deals before competition body
Watchdog devoting 'significant resources' to bank cases
New rules to protect crowdfunding investors
Providers' ads must warn of potential risks – Central Bank
Former in-house lawyer is appointed to CCPC
Úna Butler previously set up body's legal team
€300 court fee for late bar waived until April
Move to prop up night-time economy