text:
St Pat Show
Welcome to stpatstow
It's Soccer Time!
Lionel Messi gives the Spurs defence at Wembley
This is an evening when was gawp in the player that can bend the match based on his own lawsSometimes gawp a bit and observe — and possibly you do only have to stand, also. The athletes in each game give us a glimpse of another thing, a remix of all the laws that are physical. In Wembley this feeling had an excess thickness as Lionel Messi made a hall-of-fame functionality but did so in a Barcelona staff who had been stretched occasionally even since the genius in the opposite end was scoring double, hitting the post twice and assisting make another two at a 4-2 triumph.More than watching Barcelona felt like a game in a game, of sporting fact intersecting two airplanes. From the sport beneath the surface a group of connections and components worked hard at maintaining its departure and pressing on against game. And the one layered on the top, at the match, Messi took off from everybody else, swiping Spurs defence like a round, and making minutes of vision and control a window frame.It didn't take long for the first law of physics of Messi to claim itself. With 90 seconds gone that recognizable figure spun around and picked up the ball in the circle, the Messi sonar picking trajectory and the place of each object within his scope.The pass to Jordi Alba did not exist.
There were bodies at all. The point of sight has been blocked. The pass was a notion something scribbled on a notice, talks.Messi did it hitting since they ran back the ball enough fade to slide through the goal place between Kieran Trippier and Philippe Coutinho. Hugo Lloris watched it too late, rushing out arms waggling at his hands, in a fear, like a man chasing hens throughout a intersection. The weight of this pass was ideal, offering a indoors to Alba. With two minutes a Messi pass had abandoned the tops writhing around in their area such as the dregs in the home.Our weekly email of editors' selections.The passing of messi was a characteristic of his blossom, which footballing spider-sense letting him suspend the movement facing him, in which he's free to perform the things with his foot a picture. Left feet such as these are usually referred to as"cultured" or even"educated". He did the other things. He's a dribbler, capable to liquefy the ball from foot to foot as a boxer unloading a mix although messi might have dropped some stride. Four minutes after struck at the post and he left the exact same run. Five minutes later that he eventually made it 3-1, playing with a beautiful pass out to Alba, shooting the return and just putting it inside this pole, hitting the ball down to the floor, a man enjoy the sense of this bounce even because he killed the match.It's tough to blame Spurs too much.
The way to assess when one player has a deep impact this particular game, illuminating his teammates together with these flashes that are divine? Spurs had come to Wembley underpowered, without their midfield runner their playmaker, their own holder and their defender. Equipped with opponents who might maintain a #130m sub on the seat (the whole home beginning XI cost just #15m longer ) Spurs played nicely in the second half. Harry Kane proceeded with a number of his energy that was persistent and pulled back. Érik Lamela made it to proceed. However, Messi still appears to spare a bit of his finest for the English. All these were his 21st and intentions against Premier League competitions, a night where more his traces at close quarters and his departure were as great. Tottenham are in Group B now in trouble. The season will hurry on. Barcelona will come back. However, we should treasure sparks of brilliance, these minutes out of a participant to date ahead of everybody else it is inviting to take them.
Lionel Meesi during Barcelona home draw against Athletic.
Leaders Barcelona managed a 1-1 home draw within six days, their stage dropped without a win in 3. And in between these games, Sevilla conquer Eibar, taking them on to 17 targets in 10 days, including three against Madrid. In 3, they had not won before that, amassing a purpose. They had scored. It was an early-season quirk: just Barcelona, Madrid and Atlético had points, because Abelardo Fernández took over 31 months earlier. They did not, although all of Alavés needed to do today was conquer at Levante, who had slipped into the relegation zone . Levante scored earlier Jason, half-time and Toño García obtaining the targets. "They were much better than people," Abelardo explained. "It is quite tricky to win" So that it belongs: Levante's acquaintances Valencia, contenders last season but only 1 point over relegation in kick-off, had a penalty save from Neto to win for the very first time. Together with the budget in the branch, Real Valladolid beat Villarreal, up the shore. The who overcome Barcelona.
However, you understand, La Liga: dull, uncompetitive and that.
Villarreal have not won a match at home this season; as for Valladolid, they have not lost a match off. Up late through the play-offs, they are just two points away a location, and spent $ 2m in the summertime. Athletic, real Sociedad and Valencia are all 14th 13th and 15th. The three — and the best Barcelona Sevilla, Atlético are predictable Huesca, Rayo Vallecano, Leganés — however, this isn't the same as ever. You can observe that from the stats. The guy who has finished most passes plays Betis (Mandi), the guy with the majority of powerful crosses (Jonathan Silva) reaches Leganés, and nobody has more assists than Alavés's Jony — even though Lionel Messi has too. The difficulty wasn't so much Madrid and Barcelona won each league — although one name won by somebody else at the previous 14 years is not good — because the threat they won them too readily, they won nearly every match. That is broken. That fall, an Atlético player confided:"We can not acquire a 100-point league," but they did not need to, that is 1 reason that they won an nearly impossible name.
Only seven months in, nobody is winless in Spain and nobody is unbeaten. Expand this to fourth and it has 31 points fell from Spain, 14 in England. The Premier League's best three points; the best of Spain. Nobody has wonwith things. When Madrid won the title to locate anything close, you need to return into 2006-07. Ever since that time, the winners have accumulated 93 and 87, 99, 96, 100, 100, 90, 94, 91, 93 points. On in fact embarking on a familiar early-season travel they were. That is obviously the way, an outcome of media policy, where four papers are committed to Madrid and Barcelona, and the majority of the TV and radio is too, a socioeconomic and cultural fact in a nation where more than 60 percent of fans encourage them.
Real Madrid had amazed and were excellent against Roma, particularly, the soccer better than previously. There was a hurry onto"Ronaldo who?" Benzema a 9 but efficacy has plummeted. You need to return seven decades for the time that they moved two league matches without scoring in a row. Founded from Getafe, Espanyol, Huesca and Girona, looked back through the prism of today, do convince, 1-0 success at Valladolid do not and as Barcelona's 2-1 win at Real Sociedad on this pitch. Opportunities were few, also at the second half which was authentic, although julen Lopetegui said his group had mastered Atlético this weekend. After double but three times? Barcelona are poor.
However, while cheap is 1 term, might aggressive be yet another? Can there be something ? Though La Liga has tended to become a race since Simeone came back in Spain, and turned into a race — it wasn't because the remainder were donkeys. Between these teams have won nine of their 10 names, offering four winners of the two contests of this continent. La Liga accounts for four of the six. Celta and villarreal have been at the previous 3 decades.
And matters are advancing. Economic management applied has helped attract equilibrium. Administration and bankruptcy have gone into a goal of $50m five years back against the top two branches, football debt to say being paid off from $600m following season. Even the TV deal is collective driven by the league since they knew it would not hold differently, and also enshrined by legislation — and the earnings is rising, the difference between the surface and the base. Spanish nightclubs spent 900m this summer.
The difference remains vast. It's likewise huge between England and Spain, the anxiety of being suppressed actual and the financial ability of Spain's"other" clubs stays modest. Spanish clubs may have spent but in net spend it under $100m. The majority of the earnings go to England — it's also what amuses them, although that the Premier League is your danger. It had been After Barcelona and Madrid equally dropped in midweek. And Betis, Alavés and Espanyol are seventh, sixth and fifth. "It'd be wonderful if everything became equal," said trainer Mauricio Pellegrino. "Normality are for matters to be like they had been over 20 decades back. But we are we beat the group who is first — and that is very good news." Realism states it will not last, that at the conclusion the very same teams will probably be there. That, forget extrapolating in their outcomes to compute an team, they'll quicken leaving these characters behind. Optimism claims that it seems somewhat different; it may not continue while it will — and outside, but it may be appreciated. That their trip there will not be simple. It is supposed to be. agen sbobet terpercaya
• Atlético Madrid have requested the refereeing committee to"explain" using VAR for handballs once they were denied a potential punishment against Casemiro (and yet another from Sergio Ramos).
None were hurt. Since the players assembled, attempting to assist, Pablo Sarabia turned into an Eibar participant and stated:"The man from the league can not just come and say'They broke it. It would not be a surprise if that is what occurs.
• They have got a Scottish goalkeeper and a British centre-back so how are Actual Murcia's competitions supposed to score? They have moved in Segunda B, Group 4, with surrendered three season. Following Jack Harper scored to give them a 1-0 triumph over Rayo Majadahonda Málaga are high of the Second Section. Continuing this week's Brit Watch, Nick Blackman and Patrick Roberts arrived as subs for both Girona and Sporting and performed. In the branch, Gareth Bale has not travelled to Russia and was away in half-time at the derby. He expected to be outside for a few weeks. The pitch of paul Burgess was ideal.
https://www.youtube.com/watch?v=Gxa0-RLq_-Q
© 2020 St Pat Show. Built using WordPress and the Mesmerize Theme


Learn to Play Hockey is an eight week program for young skaters ages 4 to 9 years old that have never played organized hockey. These skaters must have some experience skating, including being able to stay on their feet. This is not a learn to skate program although basic skills will be used. This is an 8 Session Program.
Season: Next session starting Saturday Januar 26th at Ristuccia Arena, Wilmington.
Full hockey equipment is required: Hockey gloves, shin pads, elbow pads, skates, and stick are all required. As is a certified hockey helmet with cage. Hockey pants are not a must, but are strongly suggested.
Rental equipment is available (Rental FEE $20) for new Learn to Play members: This includes: helmet, pants, gloves, shoulder pads, elbow pads and shin pads -- all equipment comes complete in a hockey bag. Equipment not returned will result in a $50 charge.
When registering, you can indicate that you need rental equipment. Full program payment is due at the time of registration.


In this article, I will take you through some of the fundamental features. If you're familiar with React or Angular2, some of these features won't be new to you. Even if you're not, it is not a problem! Vue is easy to pick up and integrate with other libraries or existing projects.
This instance takes the option object which includes options such as DOM element, data object, Lifecycle hooks and so on. See the complete list of options here.
Vue uses an HTML-based template syntax that allows you to declaratively bind the rendered DOM to the underlying Vue instance's data. Internally, Vue compiles the templates into Virtual DOM render functions.
The data binding is done using double curly braces which is called Mustache syntax.
We just saw how to define templates. We will see how to keep the state object in sync with the view and the DOM representation.
Now, we will bind the previously defined template and data together with Vue.
Vue has converted the object and made it "reactive". Any changes you make to the sample.message will be instantly visible in the rendered HTML.
Vue offers computed properties for more complicated logic. Let's look at an example.
Here, the computed property is slicedText. The property slicedText tracks text as a dependency, and is automatically kept in sync. This property will only present a getter by default.
A common need for data binding is manipulating an element's class list and its inline styles. This can be done by using directives v-bind:class and v-bind:style to handle them.
The object syntax for v-bind:style is quite straightforward. We can use either camelCase or kebab-case (use quotes with kebab-case) for the CSS property names.
Not only objects, v-on accepts even method names.
For example, provide methods option within Vue instance.
Components are one of the powerful features, which can be used for structuring complex interfaces. They help you to encapsulate reusable code.
To register a global component, we can use Vue.component(tagName, options).
Once registered, a component can be used in an instance's template as a custom element. Make sure the component is registered before root Vue instance is instantiated.
For the complete demo, check out my Pen here.
This article has just scratched the surface of Vue's capabilities. It has a lot more powerful features. If you are interested in learning Vue in depth, check out their official site for a detailed documentation and API reference. I hope you will enjoy learning VueJS.


text:
// Copyright (c) 2006-2008 by Martin Stubenschrott <stubenschrott@vimperator.org>
// Copyright (c) 2007-2011 by Doug Kearns <dougkearns@gmail.com>
// Copyright (c) 2008-2015 Kris Maglione <maglione.k at Gmail>
//
// This work is licensed for reuse under an MIT license. Details are
// given in the LICENSE.txt file included with this file.
"use strict";

/** @scope modules */

/**
 * A hive used mainly for tracking event listeners and cleaning them up when a
 * group is destroyed.
 */
var EventHive = Class("EventHive", Contexts.Hive, {
    init: function init(group) {
        init.supercall(this, group);
        this.sessionListeners = [];
    },

    cleanup: function cleanup() {
        this.unlisten(null);
    },

    _events: function _events(event, callback) {
        if (isObject(event))
            var [self, events] = [event, event[callback || "events"]];
        else
            [self, events] = [null, { [event]: callback }];

        if (hasOwnProp(events, "input") && !hasOwnProp(events, "dactyl-input"))
            events["dactyl-input"] = events.input;

        return [self, events];
    },

    /**
     * Adds an event listener for this session and removes it on
     * dactyl shutdown.
     *
     * @param {Element} target The element on which to listen.
     * @param {string} event The event to listen for.
     * @param {function} callback The function to call when the event is received.
     * @param {boolean} capture When true, listen during the capture
     *      phase, otherwise during the bubbling phase.
     * @param {boolean} allowUntrusted When true, allow capturing of
     *      untrusted events.
     */
    listen: function (target, event, callback, capture, allowUntrusted) {
        var [self, events] = this._events(event, callback);

        for (let [event, callback] of iter(events)) {
            let args = [util.weakReference(target),
                        util.weakReference(self),
                        event,
                        this.wrapListener(callback, self),
                        capture,
                        allowUntrusted];

            apply(target, "addEventListener", args.slice(2));
            this.sessionListeners.push(args);
        }
    },

    /**
     * Remove an event listener.
     *
     * @param {Element} target The element on which to listen.
     * @param {string} event The event to listen for.
     * @param {function} callback The function to call when the event is received.
     * @param {boolean} capture When true, listen during the capture
     *      phase, otherwise during the bubbling phase.
     */
    unlisten: function (target, event, callback, capture) {
        if (target != null)
            var [self, events] = this._events(event, callback);

        this.sessionListeners = this.sessionListeners.filter(function (args) {
            let elem = args[0].get();
            if (target == null || elem == target
                               && self == args[1].get()
                               && hasOwnProp(events, args[2])
                               && args[3].wrapped == events[args[2]]
                               && args[4] == capture) {

                apply(elem, "removeEventListener", args.slice(2));
                return false;
            }
            return elem;
        });
    },

    get wrapListener() { return events.bound.wrapListener; }
});

/**
 * @instance events
 */
var Events = Module("events", {
    dbg: function (...args) {
        util.dump(...args);
    },

    debug: false,

    init: function () {
        this.keyEvents = [];

        overlay.overlayWindow(window, {
            append: [
                ["window", { id: document.documentElement.id, xmlns: "xul" },
                    // http://developer.mozilla.org/en/docs/XUL_Tutorial:Updating_Commands
                    ["commandset", { id: "dactyl-onfocus", commandupdater: "true", events: "focus",
                                     commandupdate: this.bound.onFocusChange }],
                    ["commandset", { id: "dactyl-onselect", commandupdater: "true", events: "select",
                                     commandupdate: this.bound.onSelectionChange }]]]
        });

        this._fullscreen = window.fullScreen;
        this._lastFocus = { get: function () { return null; } };
        this._macroKeys = [];
        this._lastMacro = "";

        this._macros = storage.newMap("registers", { privateData: true, store: true });
        if (storage.exists("macros")) {
            for (let [k, m] of storage.newMap("macros", { store: true }))
                this._macros.set(k, { text: m.keys, timestamp: m.timeRecorded * 1000 });
            storage.remove("macros");
        }

        this.popups = {
            active: [],

            activeMenubar: null,

            update: function update(elem) {
                if (elem) {
                    if (elem instanceof Ci.nsIAutoCompletePopup
                            || elem.localName == "tooltip"
                            || !elem.popupBoxObject)
                        return;

                    if (!~this.active.indexOf(elem))
                        this.active.push(elem);
                }

                this.active = this.active.filter(e => e.popupBoxObject && e.popupBoxObject.popupState != "closed");

                if (!this.active.length && !this.activeMenubar)
                    modes.remove(modes.MENU, true);
                else if (modes.main != modes.MENU)
                    modes.push(modes.MENU);
            },

            events: {
                DOMMenuBarActive: function onDOMMenuBarActive(event) {
                    this.activeMenubar = event.target;
                    if (modes.main != modes.MENU)
                        modes.push(modes.MENU);
                },

                DOMMenuBarInactive: function onDOMMenuBarInactive(event) {
                    this.activeMenubar = null;
                    modes.remove(modes.MENU, true);
                },

                popupshowing: function onPopupShowing(event) {
                    this.update(event.originalTarget);
                },

                popupshown: function onPopupShown(event) {
                    let elem = event.originalTarget;
                    this.update(elem);

                    if (elem instanceof Ci.nsIAutoCompletePopup) {
                        if (modes.main != modes.AUTOCOMPLETE)
                            modes.push(modes.AUTOCOMPLETE);
                    }
                    else if (elem.hidePopup && elem.localName !== "tooltip"
                                && Events.isHidden(elem)
                                && Events.isHidden(elem.parentNode)) {
                        elem.hidePopup();
                    }
                },

                popuphidden: function onPopupHidden(event) {
                    this.update();
                    modes.remove(modes.AUTOCOMPLETE);
                }
            }
        };

        this.listen(window, this, "events", true);
        this.listen(window, this.popups, "events", true);

        this.grabFocus = 0;
        this.grabFocusTimer = Timer(100, 10000, () => {
            this.grabFocus = 0;
        });
    },

    cleanup: function cleanup() {
        let elem = dactyl.focusedElement;
        if (DOM(elem).isEditable)
            util.trapErrors("removeEditActionListener",
                            DOM(elem).editor, editor);
    },

    signals: {
        "browser.locationChange": function (webProgress, request, uri) {
            options.get("passkeys").flush();
        },
        "modes.change": function (oldMode, newMode) {
            delete this.processor;
        }
    },

    get listen() { return this.builtin.bound.listen; },
    addSessionListener: deprecated("events.listen", { get: function addSessionListener() { return this.listen; } }),

    /**
     * Wraps an event listener to ensure that errors are reported.
     */
    wrapListener: function wrapListener(method, self=this) {
        method.wrapper = wrappedListener;
        wrappedListener.wrapped = method;
        function wrappedListener(event) {
            try {
                method.apply(self, arguments);
            }
            catch (e) {
                dactyl.reportError(e);
                if (e.message == "Interrupted")
                    dactyl.echoerr(_("error.interrupted"), commandline.FORCE_SINGLELINE);
                else
                    dactyl.echoerr(_("event.error", event.type, e.echoerr || e),
                                   commandline.FORCE_SINGLELINE);
            }
        };
        return wrappedListener;
    },

    /**
     * @property {boolean} Whether synthetic key events are currently being
     *     processed.
     */
    feedingKeys: false,

    /**
     * Initiates the recording of a key event macro.
     *
     * @param {string} macro The name for the macro.
     */
    _recording: null,
    get recording() { return this._recording; },

    set recording(macro) {
        dactyl.assert(macro == null || /[a-zA-Z0-9]/.test(macro),
                      _("macro.invalid", macro));

        modes.recording = macro;

        if (/[A-Z]/.test(macro)) { // Append.
            macro = macro.toLowerCase();
            this._macroKeys = DOM.Event.iterKeys(editor.getRegister(macro))
                                 .toArray();
        }
        else if (macro) { // Record afresh.
            this._macroKeys = [];
        }
        else if (this.recording) { // Save.
            editor.setRegister(this.recording, this._macroKeys.join(""));

            dactyl.log(_("macro.recorded", this.recording, this._macroKeys.join("")), 9);
            dactyl.echomsg(_("macro.recorded", this.recording));
        }
        this._recording = macro || null;
    },

    /**
     * Replays a macro.
     *
     * @param {string} The name of the macro to replay.
     * @returns {boolean}
     */
    playMacro: function (macro) {
        dactyl.assert(/^[a-zA-Z0-9@]$/.test(macro),
                      _("macro.invalid", macro));

        if (macro == "@")
            dactyl.assert(this._lastMacro, _("macro.noPrevious"));
        else
            this._lastMacro = macro.toLowerCase(); // XXX: sets last played macro, even if it does not yet exist

        let keys = editor.getRegister(this._lastMacro);
        if (keys)
            return modes.withSavedValues(["replaying"], function () {
                this.replaying = true;
                return events.feedkeys(keys, { noremap: true });
            });

        // TODO: ignore this like Vim?
        dactyl.echoerr(_("macro.noSuch", this._lastMacro));
        return false;
    },

    /**
     * Returns all macros matching *filter*.
     *
     * @param {string} filter A regular expression filter string. A null
     *     filter selects all macros.
     */
    getMacros: function (filter = null) {
        let re = RegExp(filter || "");

        return Array.from(editor.registers,
                          ([key, macro]) => [key, macro.text])
                    .filter(([key]) => re.test(key));
    },

    /**
     * Deletes all macros matching *filter*.
     *
     * @param {string} filter A regular expression filter string. A null
     *     filter deletes all macros.
     */
    deleteMacros: function (filter) {
        let re = RegExp(filter || "");
        for (let [item, ] of editor.registers) {
            if (!filter || re.test(item))
                editor.registers.remove(item);
        }
    },

    /**
     * Feeds a list of events to *target* or the originalTarget member
     * of each event if *target* is null.
     *
     * @param {EventTarget} target The destination node for the events.
     *      @optional
     * @param {[Event]} list The events to dispatch.
     * @param {object} extra Extra properties for processing by dactyl.
     *      @optional
     */
    feedevents: function feedevents(target, list, extra) {
        list.forEach(function _feedevent(event, i) {
            let elem = target || event.originalTarget;
            if (elem) {
                let doc = elem.ownerDocument || elem.document || elem;
                let evt = DOM.Event(doc, event.type, event);
                DOM.Event.dispatch(elem, evt, extra);
            }
            else if (i > 0 && event.type === "keypress")
                events.events.keypress.call(events, event);
        });
    },

    /**
     * Pushes keys onto the event queue from dactyl. It is similar to
     * Vim's feedkeys() method, but cannot cope with 2 partially-fed
     * strings, you have to feed one parseable string.
     *
     * @param {string} keys A string like "2<C-f>" to push onto the event
     *     queue. If you want "<" to be taken literally, prepend it with a
     *     "\\".
     * @param {boolean} noremap Whether recursive mappings should be
     *     disallowed.
     * @param {boolean} silent Whether the command should be echoed to the
     *     command line.
     * @returns {boolean}
     */
    feedkeys: function (keys, noremap, quiet, mode) {
        try {
            var savedEvents = this._processor && this._processor.keyEvents;

            var wasFeeding = this.feedingKeys;
            this.feedingKeys = true;

            var wasQuiet = commandline.quiet;
            if (quiet)
                commandline.quiet = quiet;

            for (let evt_obj of DOM.Event.parse(keys)) {
                let key = DOM.Event.stringify(evt_obj);
                for (let type of ["keydown", "keypress", "keyup"]) {
                    let evt = update({}, evt_obj, { type: type });
                    if (type !== "keypress" && !evt.keyCode)
                        evt.keyCode = evt._keyCode || 0;

                    if (isObject(noremap))
                        update(evt, noremap);
                    else
                        evt.noremap = !!noremap;
                    evt.isMacro = true;
                    evt.dactylMode = mode;
                    evt.dactylSavedEvents = savedEvents;
                    DOM.Event.feedingEvent = evt;

                    let doc = document.commandDispatcher.focusedWindow.document;

                    let target = dactyl.focusedElement
                              || ["complete", "interactive"].indexOf(doc.readyState) >= 0 && doc.documentElement
                              || doc.defaultView;

                    if (target instanceof Element && !Events.isInputElement(target) &&
                        ["<Return>", "<Space>"].indexOf(key) == -1)
                        target = target.ownerDocument.documentElement;

                    let event = DOM.Event(doc, type, evt);
                    if (!evt_obj.dactylString && !mode)
                        DOM.Event.dispatch(target, event, evt);
                    else if (type === "keypress")
                        events.events.keypress.call(events, event);
                }

                if (!this.feedingKeys)
                    return false;
            }
        }
        catch (e) {
            util.reportError(e);
        }
        finally {
            DOM.Event.feedingEvent = null;
            this.feedingKeys = wasFeeding;
            if (quiet)
                commandline.quiet = wasQuiet;
            dactyl.triggerObserver("events.doneFeeding");
        }
        return true;
    },

    canonicalKeys: deprecated("DOM.Event.canonicalKeys", { get: function canonicalKeys() { return DOM.Event.bound.canonicalKeys; } }),
    create:        deprecated("DOM.Event", function create() { return DOM.Event.apply(null, arguments); }),
    dispatch:      deprecated("DOM.Event.dispatch", function dispatch() { return apply(DOM.Event, "dispatch", arguments); }),
    fromString:    deprecated("DOM.Event.parse", { get: function fromString() { return DOM.Event.bound.parse; } }),
    iterKeys:      deprecated("DOM.Event.iterKeys", { get: function iterKeys() { return DOM.Event.bound.iterKeys; } }),

    toString: function toString() {
        if (!arguments.length)
            return toString.supercall(this);

        deprecated.warn(toString, "toString", "DOM.Event.stringify");
        return apply(DOM.Event, "stringify", arguments);
    },

    get defaultTarget() {
        return dactyl.focusedElement ||
               content.document.body ||
               document.documentElement;
    },

    /**
     * Returns true if there's a known native key handler for the given
     * event in the given mode.
     *
     * @param {Event} event A keypress event.
     * @param {Modes.Mode} mode The main mode.
     * @param {boolean} passUnknown Whether unknown keys should be passed.
     */
    hasNativeKey: function hasNativeKey(event, mode, passUnknown) {
        if (mode.input && event.charCode && !(event.ctrlKey || event.metaKey))
            return true;

        if (!passUnknown)
            return false;

        var elements = document.getElementsByTagNameNS(XUL, "key");
        var filters = [];

        if (event.keyCode)
            filters.push(["keycode", this._code_nativeKey[event.keyCode]]);
        if (event.charCode) {
            let key = String.fromCharCode(event.charCode);
            filters.push(["key", key.toUpperCase()],
                         ["key", key.toLowerCase()]);
        }

        let accel = config.OS.isMacOSX ? "metaKey" : "ctrlKey";

        let access = iter({ 1: "shiftKey", 2: "ctrlKey", 4: "altKey", 8: "metaKey" })
                        .filter(function ([k, v]) { return this & k; },
                                prefs.get("ui.key.chromeAccess")) // XXX
                        .map(([k, v]) => [v, true])
                        .toObject();

    outer:
        for (let key of elements)
            if (filters.some(([k, v]) => key.getAttribute(k) == v)) {
                let keys = { ctrlKey: false, altKey: false, shiftKey: false, metaKey: false };
                let needed = { ctrlKey: event.ctrlKey, altKey: event.altKey, shiftKey: event.shiftKey, metaKey: event.metaKey };

                let modifiers = (key.getAttribute("modifiers") || "").trim().split(/[\s,]+/);
                for (let modifier of modifiers)
                    switch (modifier) {
                    case "access": update(keys, access); break;
                    case "accel":  keys[accel] = true; break;
                    default:       keys[modifier + "Key"] = true; break;
                    case "any":
                        if (!iter(keys).some(([k, v]) => v && needed[k]))
                            continue outer;
                        for (let [k, v] of iter(keys)) {
                            if (v)
                                needed[k] = false;
                            keys[k] = false;
                        }
                        break;
                    }

                if (iter(needed).every(([k, v]) => (v == keys[k])))
                    return key;
            }

        return false;
    },

    /**
     * Returns true if *key* is a key code defined to accept/execute input on
     * the command line.
     *
     * @param {string} key The key code to test.
     * @returns {boolean}
     */
    isAcceptKey: function (key) {
        return key == "<Return>" || key == "<C-j>" || key == "<C-m>";
    },

    /**
     * Returns true if *key* is a key code defined to reject/cancel input on
     * the command line.
     *
     * @param {string} key The key code to test.
     * @returns {boolean}
     */
    isCancelKey: function (key) {
        return key == "<Esc>" || key == "<C-[>" || key == "<C-c>";
    },

    /**
     * Returns true if *node* belongs to the current content document or any
     * sub-frame thereof.
     *
     * @param {Node|Document|Window} node The node to test.
     * @returns {boolean}
     */
    isContentNode: function isContentNode(node) {
        let win = (node.ownerDocument || node).defaultView || node;
        return XPCNativeWrapper(win).top == content;
    },

    /**
     * Waits for the current buffer to successfully finish loading. Returns
     * true for a successful page load otherwise false.
     *
     * @returns {boolean}
     */
    waitForPageLoad: function (time) {
        if (buffer.loaded)
            return true;

        dactyl.echo(_("macro.loadWaiting"), commandline.FORCE_SINGLELINE);

        const maxWaitTime = (time || 25);
        util.waitFor(() => buffer.loaded, this,
                     maxWaitTime * 1000, true);

        dactyl.echo("", commandline.FORCE_SINGLELINE);
        if (!buffer.loaded)
            dactyl.echoerr(_("macro.loadFailed", maxWaitTime));

        return buffer.loaded;
    },

    /**
     * Ensures that the currently focused element is visible and blurs
     * it if it's not.
     */
    checkFocus: function () {
        if (dactyl.focusedElement) {
            let rect = dactyl.focusedElement.getBoundingClientRect();
            if (!rect.width || !rect.height) {
                services.focus.clearFocus(window);
                document.commandDispatcher.focusedWindow = content;
                // onFocusChange needs to die.
                this.onFocusChange();
            }
        }
    },

    events: {
        blur: function onBlur(event) {
            let elem = event.originalTarget;
            if (DOM(elem).editor)
                util.trapErrors("removeEditActionListener",
                                DOM(elem).editor, editor);

            if (elem instanceof Window && services.focus.activeWindow == null
                && document.commandDispatcher.focusedWindow !== window) {
                // Deals with circumstances where, after the main window
                // blurs while a collapsed frame has focus, re-activating
                // the main window does not restore focus and we lose key
                // input.
                services.focus.clearFocus(window);
                document.commandDispatcher.focusedWindow = Editor.getEditor(content) ? window : content;
            }

            let hold = modes.topOfStack.params.holdFocus;
            if (elem == hold) {
                dactyl.focus(hold);
                this.timeout(function () { dactyl.focus(hold); });
            }
        },

        // TODO: Merge with onFocusChange
        focus: function onFocus(event) {
            let elem = event.originalTarget;
            if (DOM(elem).editor)
                util.trapErrors("addEditActionListener",
                                DOM(elem).editor, editor);

            if (elem == window)
                overlay.activeWindow = window;

            overlay.setData(elem, "had-focus", true);
            if (event.target instanceof Ci.nsIDOMXULTextBoxElement)
                if (Events.isHidden(elem, true))
                    elem.blur();

            let win = (elem.ownerDocument || elem).defaultView || elem;

            if (!Cu.isCrossProcessWrapper(win) &&
                !(services.focus.getLastFocusMethod(win) & 0x3000)
                && events.isContentNode(elem)
                && !buffer.focusAllowed(elem)
                && isinstance(elem, [Ci.nsIDOMHTMLInputElement,
                                     Ci.nsIDOMHTMLSelectElement,
                                     Ci.nsIDOMHTMLTextAreaElement,
                                     Ci.nsIDOMWindow])) {
                if (this.grabFocus++ > 5)
                    ; // Something is fighting us. Give up.
                else {
                    this.grabFocusTimer.tell();
                    if (elem.frameElement)
                        dactyl.focusContent(true);
                    else if (!(elem instanceof Window) || Editor.getEditor(elem))
                        dactyl.focus(window);
                }
            }

            if (elem instanceof Element)
                delete overlay.getData(elem)["focus-allowed"];
        },

        input: function onInput(event) {
            event.originalTarget.dactylKeyPress = undefined;
        },

        // this keypress handler gets always called first, even if e.g.
        // the command-line has focus
        keypress: function onKeyPress(event) {
            event.dactylDefaultPrevented = event.defaultPrevented;

            let duringFeed = this.duringFeed || [];
            this.duringFeed = [];
            try {
                let ourEvent = DOM.Event.feedingEvent;
                DOM.Event.feedingEvent = null;
                if (ourEvent)
                    for (let [k, v] of iter(ourEvent))
                        if (!(k in event))
                            event[k] = v;

                let key = DOM.Event.stringify(ourEvent || event);
                event.dactylString = key;

                // Hack to deal with <BS> and so forth not dispatching input
                // events
                if (key && event.originalTarget instanceof Ci.nsIDOMHTMLInputElement && !modes.main.passthrough) {
                    let elem = event.originalTarget;
                    elem.dactylKeyPress = elem.value;
                    util.timeout(function () {
                        if (elem.dactylKeyPress !== undefined && elem.value !== elem.dactylKeyPress)
                            DOM(elem).dactylInput();
                        elem.dactylKeyPress = undefined;
                    });
                }

                if (!key)
                     return null;

                if (modes.recording && !event.isReplay)
                    events._macroKeys.push(key);

                // feedingKeys needs to be separate from interrupted so
                // we can differentiate between a recorded <C-c>
                // interrupting whatever it's started and a real <C-c>
                // interrupting our playback.
                if (events.feedingKeys && !event.isMacro) {
                    if (key == "<C-c>") {
                        events.feedingKeys = false;
                        if (modes.replaying) {
                            modes.replaying = false;
                            this.timeout(function () { dactyl.echomsg(_("macro.canceled", this._lastMacro)); }, 100);
                        }
                    }
                    else
                        duringFeed.push(event);

                    return Events.kill(event);
                }

                if (this.processor) {
                    if (events.debug)
                        events.dbg("ON KEYPRESS " + key + " processor: " + this.processor,
                                   event.originalTarget instanceof Element ? event.originalTarget : String(event.originalTarget));
                }
                else {
                    let mode = modes.getStack(0);
                    if (event.dactylMode)
                        mode = Modes.StackElement(event.dactylMode);

                    let ignore = false;

                    if (mode.main == modes.PASS_THROUGH)
                        ignore = !Events.isEscape(key) && key != "<C-v>";
                    else if (mode.main == modes.QUOTE) {
                        if (modes.getStack(1).main == modes.PASS_THROUGH) {
                            mode = Modes.StackElement(modes.getStack(2).main);
                            ignore = Events.isEscape(key);
                        }
                        else if (events.shouldPass(event))
                            mode = Modes.StackElement(modes.getStack(1).main);
                        else
                            ignore = true;

                        modes.pop();
                    }
                    else if (!event.isMacro && !event.noremap && events.shouldPass(event))
                        ignore = true;

                    if (events.debug) {
                        events.dbg("\n\n");
                        events.dbg("ON KEYPRESS " + key + " ignore: " + ignore,
                                   event.originalTarget instanceof Element ? event.originalTarget : String(event.originalTarget));
                    }

                    if (ignore)
                        return null;

                    // FIXME: Why is this hard coded? --Kris
                    if (key == "<C-c>")
                        util.interrupted = true;

                    this.processor = ProcessorStack(mode, mappings.hives.array, event.noremap);
                    this.processor.keyEvents = this.keyEvents;
                }

                let { keyEvents, processor } = this;
                this._processor = processor;
                this.processor = null;
                this.keyEvents = [];

                if (!processor.process(event)) {
                    this.keyEvents = keyEvents;
                    this.processor = processor;
                }

            }
            catch (e) {
                dactyl.reportError(e);
            }
            finally {
                [duringFeed, this.duringFeed] = [this.duringFeed, duringFeed];
                if (this.feedingKeys)
                    this.duringFeed = this.duringFeed.concat(duringFeed);
                else
                    for (let event of duringFeed)
                        try {
                            DOM.Event.dispatch(event.originalTarget, event, event);
                        }
                        catch (e) {
                            util.reportError(e);
                        }
            }
        },

        keyup: function onKeyUp(event) {
            if (event.type == "keydown")
                this.keyEvents.push(event);
            else if (!this.processor)
                this.keyEvents = [];

            let key = DOM.Event.stringify(event);

            let hasCandidates = mode => {
                return mappings.hives.some(hive => (hive.get(mode, key, true) ||
                                                    hive.getCandidates(mode, key, true)));
            };

            let pass = (() => {
                if (this.passing && !event.isMacro)
                    return true;

                if (DOM.Event.feedingEvent && DOM.Event.feedingEvent.isReplay)
                    return true;

                if (event.isReplay)
                    return true;

                if (modes.main == modes.PASS_THROUGH)
                    return true;

                if (modes.main == modes.QUOTE &&
                        modes.getStack(1).main !== modes.PASS_THROUGH &&
                        !this.shouldPass(event))
                    return true;

                if (!modes.passThrough && this.shouldPass(event))
                    return true;

                if (!this.processor && event.type === "keydown" &&
                        options.get("passunknown").getKey(modes.main.allBases)) {
                    if (modes.main.count && /^\d$/.test(key))
                        return false;

                    if (modes.main.allBases.some(hasCandidates))
                        return false;

                    return true;
                }

                return false;
            })();

            if (events.debug)
                events.dbg("ON " + event.type.toUpperCase() + " " + key +
                           " passing: " + this.passing + " " +
                           " pass: " + pass +
                           " replay: " + event.isReplay +
                           " macro: " + event.isMacro);

            if (event.type === "keydown")
                this.passing = pass;

            // Prevents certain sites from transferring focus to an input box
            // before we get a chance to process our key bindings on the
            // "keypress" event.
            if (!pass && Cu.getClassName(event, true) !== "Proxy")
                event.stopPropagation();
        },
        keydown: function onKeyDown(event) {
            if (!event.isMacro)
                this.passing = false;
            this.events.keyup.call(this, event);
        },

        mousedown: function onMouseDown(event) {
            let elem = event.target;
            let win = elem.ownerDocument && elem.ownerDocument.defaultView || elem;

            for (; win; win = win != win.parent && win.parent) {
                for (; elem instanceof Element; elem = elem.parentNode)
                    overlay.setData(elem, "focus-allowed", true);
                overlay.setData(win.document, "focus-allowed", true);
            }
        },

        resize: function onResize(event) {
            if (window.fullScreen != this._fullscreen) {
                statusline.statusBar.removeAttribute("moz-collapsed");
                this._fullscreen = window.fullScreen;
                dactyl.triggerObserver("fullscreen", this._fullscreen);
                autocommands.trigger("Fullscreen", { url: this._fullscreen ? "on" : "off", state: this._fullscreen });
            }
            statusline.updateZoomLevel();
        }
    },

    onFocusChange: util.wrapCallback(function onFocusChange(event) {
        function hasHTMLDocument(win) {
            return win && win.document && win.document instanceof Ci.nsIDOMHTMLDocument;
        }

        if (dactyl.ignoreFocus)
            return;

        let win  = window.document.commandDispatcher.focusedWindow;
        let elem = window.document.commandDispatcher.focusedElement;

        if (elem == null && Editor.getEditor(win))
            elem = win;

        if (win && win.top == content && dactyl.has("tabs"))
            buffer.focusedFrame = win;

        try {
            if (elem && elem.readOnly)
                return;

            if (isinstance(elem, [Ci.nsIDOMHTMLEmbedElement, Ci.nsIDOMHTMLEmbedElement])) {
                if (!modes.main.passthrough && modes.main != modes.EMBED)
                    modes.push(modes.EMBED);
                return;
            }

            let haveInput = modes.stack.some(m => m.main.input);

            if (DOM(elem || win).isEditable) {
                let e = elem || win;
                if (!(e instanceof Ci.nsIDOMWindow &&
                        DOM(e.document.activeElement).style.MozUserModify != "read-write")) {
                    if (!haveInput)
                        if (!isinstance(modes.main, [modes.INPUT, modes.TEXT_EDIT, modes.VISUAL]))
                            if (options["insertmode"])
                                modes.push(modes.INSERT);
                            else {
                                modes.push(modes.TEXT_EDIT);
                                if (elem.selectionEnd - elem.selectionStart > 0)
                                    modes.push(modes.VISUAL);
                            }

                    if (hasHTMLDocument(win))
                        buffer.lastInputField = elem || win;
                    return;
                }
            }

            if (elem && Events.isInputElement(elem)) {
                if (!haveInput)
                    modes.push(modes.INSERT);

                if (hasHTMLDocument(win))
                    buffer.lastInputField = elem;
                return;
            }

            if (config.focusChange) {
                config.focusChange(win);
                return;
            }

            let urlbar = document.getElementById("urlbar");
            if (elem == null && urlbar && urlbar.inputField == this._lastFocus.get())
                util.threadYield(true); // Why? --Kris

            let ownsFocus = () => {
                if (!modes.main.ownsFocus)
                    return false;

                let { ownsFocus } = modes.topOfStack.params;
                if (ownsFocus && ~[elem, win].indexOf(ownsFocus.get()))
                    return false;

                return !modes.topOfStack.params.holdFocus;
            };

            while (ownsFocus())
                 modes.pop(null, { fromFocus: true });
        }
        finally {
            this._lastFocus = util.weakReference(elem);

            if (modes.main.ownsFocus)
                modes.topOfStack.params.ownsFocus = util.weakReference(elem);
        }
    }),

    onSelectionChange: function onSelectionChange(event) {
        // Ignore selection events caused by editor commands.
        if (editor.inEditMap || modes.main == modes.OPERATOR)
            return;

        let controller = document.commandDispatcher.getControllerForCommand("cmd_copy");
        let couldCopy = controller && controller.isCommandEnabled("cmd_copy");

        if (couldCopy) {
            if (modes.main == modes.TEXT_EDIT)
                modes.push(modes.VISUAL);
            else if (modes.main == modes.CARET)
                modes.push(modes.VISUAL);
        }
    },

    shouldPass: function shouldPass(event) {
        return !event.noremap && (!dactyl.focusedElement || events.isContentNode(dactyl.focusedElement)) &&
               options.get("passkeys").has(DOM.Event.stringify(event));
    }
}, {
    ABORT: {},
    KILL: true,
    PASS: false,
    PASS_THROUGH: {},
    WAIT: null,

    isEscape: function isEscape(event) {
        let key = isString(event) ? event : DOM.Event.stringify(event);
        return key === "<Esc>" || key === "<C-[>";
    },

    isHidden: function isHidden(elem, aggressive) {
        if (DOM(elem).style.visibility !== "visible")
            return true;

        if (aggressive)
            for (let e = elem; e instanceof Element; e = e.parentNode) {
                if (!/set$/.test(e.localName) && e.boxObject && e.boxObject.height === 0)
                    return true;
                else if (e.namespaceURI == XUL && e.localName === "panel")
                    break;
            }
        return false;
    },

    isInputElement: function isInputElement(elem) {
        return elem instanceof Ci.nsIDOMElement && DOM(elem).isEditable ||
               isinstance(elem, [Ci.nsIDOMHTMLEmbedElement,
                                 Ci.nsIDOMHTMLObjectElement,
                                 Ci.nsIDOMHTMLSelectElement]);
    },

    kill: function kill(event) {
        event.stopPropagation();
        event.preventDefault();
    }
}, {
    contexts: function initContexts(dactyl, modules, window) {
        update(Events.prototype, {
            hives: contexts.Hives("events", EventHive),
            user: contexts.hives.events.user,
            builtin: contexts.hives.events.builtin
        });
    },

    commands: function initCommands() {
        commands.add(["delmac[ros]"],
            "Delete macros",
            function (args) {
                dactyl.assert(!args.bang || !args[0], _("error.invalidArgument"));

                if (args.bang)
                    events.deleteMacros();
                else if (args[0])
                    events.deleteMacros(args[0]);
                else
                    dactyl.echoerr(_("error.argumentRequired"));
            }, {
                argCount: "?",
                bang: true,
                completer: function (context) { completion.macro(context); },
                literal: 0
            });

        commands.add(["mac[ros]"],
            "List all macros",
            function (args) {
                completion.listCompleter("macro", args[0]);
            }, {
                argCount: "?",
                completer: function (context) { completion.macro(context); }
            });
    },
    completion: function initCompletion() {
        completion.macro = function macro(context) {
            context.title = ["Macro", "Keys"];
            context.completions = Array.from(events.getMacros());
        };
    },
    mappings: function initMappings() {

        mappings.add([modes.MAIN],
            ["<A-b>", "<pass-next-key-builtin>"], "Process the next key as a builtin mapping",
            function () {
                events.processor = ProcessorStack(modes.getStack(0), mappings.hives.array, true);
                events.processor.keyEvents = events.keyEvents;
            });

        mappings.add([modes.MAIN],
            ["<C-z>", "<pass-all-keys>"], "Temporarily ignore all " + config.appName + " key bindings",
            function () {
                if (modes.main != modes.PASS_THROUGH)
                    modes.push(modes.PASS_THROUGH);
            });

        mappings.add([modes.MAIN, modes.PASS_THROUGH, modes.QUOTE],
            ["<C-v>", "<pass-next-key>"], "Pass through next key",
            function () {
                if (modes.main == modes.QUOTE)
                    return Events.PASS;
                modes.push(modes.QUOTE);
            });

        mappings.add([modes.BASE],
            ["<CapsLock>"], "Do Nothing",
            function () {});

        mappings.add([modes.BASE],
            ["<Nop>"], "Do nothing",
            function () {});

        mappings.add([modes.BASE],
            ["<Pass>"], "Pass the events consumed by the last executed mapping",
            function ({ keypressEvents: [event] }) {
                dactyl.assert(event.dactylSavedEvents,
                              _("event.nothingToPass"));
                return () => {
                    events.feedevents(null, event.dactylSavedEvents,
                                      { skipmap: true, isMacro: true, isReplay: true });
                };
            });

        // macros
        mappings.add([modes.COMMAND],
            ["q", "<record-macro>"], "Record a key sequence into a macro",
            function ({ arg }) {
                util.assert(arg == null || /^[a-z]$/i.test(arg));
                events._macroKeys.pop();
                events.recording = arg;
            },
            { get arg() { return !modes.recording; }});

        mappings.add([modes.COMMAND],
            ["@", "<play-macro>"], "Play a macro",
            function ({ arg, count }) {
                count = Math.max(count, 1);
                while (count--)
                    events.playMacro(arg);
            },
            { arg: true, count: true });

        mappings.add([modes.COMMAND],
            ["<A-m>s", "<sleep>"], "Sleep for {count} milliseconds before continuing macro playback",
            function ({ command, count }) {
                dactyl.assert(count, _("error.countRequired", command));
                if (events.feedingKeys)
                    util.sleep(count);
            },
            { count: true });

        mappings.add([modes.COMMAND],
            ["<A-m>l", "<wait-for-page-load>"], "Wait for the current page to finish loading before continuing macro playback",
            function ({ count }) {
                if (events.feedingKeys && !events.waitForPageLoad(count)) {
                    util.interrupted = true;
                    throw Error("Interrupted");
                }
            },
            { count: true });
    },
    options: function initOptions() {
        const Hive = Class("Hive", {
            init: function init(values, map) {
                this.name = "passkeys:" + map;
                this.stack = MapHive.Stack(values.map(v => Map(v[map + "Keys"])));
                function Map(keys) {
                    return {
                        execute: function () { return Events.PASS_THROUGH; },
                        keys: keys
                    };
                }
            },

            get active() { return this.stack.length; },

            get: function get(mode, key) {
                return this.stack.mappings[key];
            },

            getCandidates: function getCandidates(mode, key) {
                return this.stack.candidates[key];
            }
        });
        options.add(["passkeys", "pk"],
            "Pass certain keys through directly for the given URLs",
            "sitemap", "", {
                flush: function flush() {
                    memoize(this, "filters", function () {
                        return this.value.filter(f => f(buffer.documentURI));
                    });
                    memoize(this, "pass", function () {
                        return new RealSet(this.filters.flatMap(f => f.keys));
                    });
                    memoize(this, "commandHive", function hive() {
                        return Hive(this.filters, "command");
                    });
                    memoize(this, "inputHive", function hive() {
                        return Hive(this.filters, "input");
                    });
                },

                has: function (key) {
                    return this.pass.has(key) ||
                           hasOwnProp(this.commandHive.stack.mappings, key);
                },

                get pass() { this.flush(); return this.pass; },

                parse: function parse() {
                    let value = parse.superapply(this, arguments);
                    value.forEach(function (filter) {
                        let vals = Option.splitList(filter.result);
                        filter.keys = DOM.Event.parse(vals[0]).map(DOM.Event.bound.stringify);

                        filter.commandKeys = vals.slice(1).map(DOM.Event.bound.canonicalKeys);
                        filter.inputKeys = filter.commandKeys.filter(bind("test", /^<[ACM]-/));
                    });
                    return value;
                },

                keepQuotes: true,

                setter: function (value) {
                    this.flush();
                    return value;
                }
            });

        options.add(["strictfocus", "sf"],
            "Prevent scripts from focusing input elements without user intervention",
            "sitemap", "'chrome:*':laissez-faire,*:moderate",
            {
                values: {
                    despotic: "Only allow focus changes when explicitly requested by the user",
                    moderate: "Allow focus changes after user-initiated focus change",
                    "laissez-faire": "Always allow focus changes"
                }
            });

        options.add(["timeout", "tmo"],
            "Whether to execute a shorter key command after a timeout when a longer command exists",
            "boolean", true);

        options.add(["timeoutlen", "tmol"],
            "Maximum time (milliseconds) to wait for a longer key command when a shorter one exists",
            "number", 1000);
    }
});

// vim: set fdm=marker sw=4 sts=4 ts=8 et:

redpajama_set_name: RedPajamaGithub


text:
Urb-it and Alibaba Group enter new partnership to bolster AliExpress' delivery capability in France.
Cainiao Network, the logistics arm of the Alibaba Group handling more than 90% of AliExpress's orders has entered into a new partnership with green logistics provider and B Corporation, Urb-it to strengthen its last-mile delivery capability in France. Signing a two-year contract, both parties will collaborate to offer a flexible and ethical delivery solution, whilst improving soft urban mobility in the region.
Paris, 29th June 2021 - Cainiao Network, the logistics arm of the Alibaba Group handling more than 90% of AliExpress's orders has entered into a new partnership with green logistics provider and B Corporation, Urb-it to strengthen its last-mile delivery capability in France. Signing a two-year contract, both parties will collaborate to offer a flexible and ethical delivery solution, whilst improving soft urban mobility in the region.
In June 2020, AliExpress (the global retail online marketplace service part of the Alibaba Group) was included in the Top 15 list of the most used sites and applications in France, with more than 1.5 million daily visitors across the country. That same year the e-commerce giant announced that with the assistance of Cainiao and leading players in French logistics, that it would seek to improve customer satisfaction and reduce its delivery time in France to three days.
Today, Cainiao and AliExpress go one step further and sharpen their sustainability focus by collaborating with Urb-it to offer customers a faster, safer, and greener emission-free delivery service. The latest partnership with the green logistics provider also comes as a welcome boost to France's environmental efforts and its 2030 Agenda plan for Sustainable Development.
"At present, delivery is a major step in the online shopping process. Our collaboration with Urb-it is part of a global effort to offer faster and better delivery to our French customers. Through this partnership we are also strengthening our investment in the preservation of the environment, with the desire to minimize our impact on the congestion of our cities." said Pierre Lestienne, Senior Logistics Advisor of Cainiao / Alibaba Group
Martin Lehec, Urb-it Country Manager France commented ,"I am proud that Cainiao has chosen us as a preferred partner for their last-mile in France. We look forward to growing together over the years, while offering fast, qualitative, and emission-free deliveries in one of their biggest markets in Europe."
About Urb-it AB (publ):
Urb-it is a Swedish logistics company and Certified B Corporation™. Powered by a robust technical platform, and its community of Couriers, Urb-it offers a customer-centric end-to-end fulfilment service for e-commerce, retail, and the on-demand market. The company today operates in the UK and France and works with leading European brands.
The company's mission is to transform logistics with a human service that fights for the health of our cities. Delivering the last-mile exclusively on foot, bike or with cargo-bikes, Urb-it aims to reduce air pollution, noise pollution and congestion in Urban areas, while providing a delivery service that exceeds customer expectations. Our Couriers are carefully recruited and trained by Urb-it to provide excellent service. The solution is available to merchants via direct API-integration as well as through a range of leading transport management systems. Services include delivering the same-day, next-day, nominated day and returns, and can be fulfilled both from the merchant's online store and physical store network. www.urb-it.com
The Company's Certified Adviser is Mangold Fondkommission AB who are reachable on +468- 503 015 50 or CA@mangold.se.
This information is such information that Urb-it AB (publ) is required to disclose in accordance with the EU Market Abuse Regulation. The information was submitted, via the above-mentioned contact person, for publication on (29rd June 2021).
About AliExpress:
Founded in 2010, AliExpress is now one of the most visited e-commerce sites in the world. With nearly 9 million cumulative buyers in France and the opening of its offline store in the heart of Paris, Cheer Zhang, director of consumer services and international markets at AliExpress have confided, "France has become a leading market for AliExpress." https://www.aliexpress.com/
About Cainiao Smart Logistics Network
Founded in 2013, Cainiao Smart Logistics Network ("Cainiao") is a technology company and the logistics affiliate of Alibaba Group. It adopts a collaborative approach to logistics with an innovative and open data platform that improves efficiency and customer experience for all players along the supply chain. It carries forward Alibaba's mission of making it easy to do business anywhere by aiming to deliver anywhere in China within 24 hours, and across the globe within 72 hours. https://global.cainiao.com/

redpajama_set_name: RedPajamaCommonCrawl


text:
Mallika Sherawat Plastic Surgery Before and After
Mallika Sherawat was born on October 24, 1976. She studied at the Miranda House, Delhi University. There, she finished a degree in philosophy. She came from a conservative family. Hence, she faced challenges when she decided to enter the entertainment industry. She started her career by appearing on television commercials. She also appeared on music videos.
Her big screen debut was in the film Jeena Sirf Merre Liye. She next starred in the films Khwahish and Kis Kis Ki Kismat. Her starring role in the film Murder garnered her significant attention. In 2005, she starred in the Chinese film The Myth, starring international star Jackie Chan. Subsequently, she starred in the movies Pyaar Ke Side Effects, Shaadi Se Pehle, and Darna Zaroori Hai. She made her Tamil debut in Dasavathaaram. Her recent role was in the 2016 Chinese film Time Raiders.
Has Mallika Sherawat had Plastic Surgery?
The Bollywood actress may already be in her 40s, but she still looks incredibly attractive and youthful. With this, there are many observers who credit the actress' ravishing look to cosmetic enhancements. Throughout her career in Bollywood, Sherawat has had her fair share of plastic surgery rumors, others which turned out to be true as reported. Because of the popularity of plastic surgery in Bollywood, fans of the actress were not surprised to hear that the star has had breast implants.
Compared to her previous body, it is apparent that the actress has now a bigger cup size, which she surely flaunts most of the time. It was also said that Sherawat has had a nose job as well as a lip job that changed her facial features. Unlike when she was younger and just starting out, her features now are sharper and fiercer. Many credited this to said nose and lip enhancements. Now she's more sophisticated than ever, so it would seem that her plastic surgery was greatly done.
Gemma Arterton Plastic Surgery Before and After
Christie Brinkley Plastic Surgery Before and After
Vanessa Marcil Plastic Surgery Before and After
Gal Gadot Plastic Surgery Before and After
Jessica Alba Plastic Surgery Before and After
Raveena Tandon Plastic Surgery Before and After
Woody Harrelson Plastic Surgery Before and After
Katie Cassidy Plastic Surgery Before and After
Melissa Rauch Plastic Surgery Before and After
Felicity Jones Plastic Surgery Before and After
Hilarie Burton Plastic Surgery Before and After
Huma Qureshi Plastic Surgery Before and After
Matthew Perry Plastic Surgery Before and After
Lynn Collins Plastic Surgery Before and After
« Asin Plastic Surgery Before and After
Amrita Rao Plastic Surgery Before and After »


Changing Behaviour should be Fun!
A friend of mine told me a story about his younger brother the other day. His mom would point a finger and say to him "You had better behave!" His brother would then rebut…"I am being Hav!" To change behaviour fast. . . add a little fun.


Greg and I just came back from the site you were meant to bury the canaries in the Suspended Animation Chamber and honestly, I was a bit disappointed. I thought we had made it clear how costly it is these days to acquire these precious little birds ever since the motor vehicle companies found they were an extremely cheap source of energy. There's hardly enough for two average-joes and their hair-brained experiments in time travel (or, since no one's actually travelling, hair-brained experiments in Past Manipulation).
Nevertheless, Greg and I will trudge on. We have an old friend Pablo who used to work with us at the Bran Factory until he inherited a pet store from late Grandfather. I'm sure he'll have a few of them lying around.
I hope you understand how dire our situation is, Bill. Greg and I need our jobs back at the factory. We're lost without them. This is why I'm giving you one more opportunity to help us. All we need you to do is dig a tunnel beneath Francisco's Pet Store on the corner of 25th and Henson. This should give us an entry way into Pablo's store in the future so we can get our canaries.
Should you fail us again, this endeavour could prove deadly. Pablo's got a bit of a temper. You don't want the weight of two future guys looming over you, do you? I didn't think so. DIG THE HOLE, BILL!


text:
{% extends 'base.html' %}

{% block title %}Home{% endblock %}

{% block content %}
<h1>{{ settings.APP_TITLE }}</h1>
{% endblock %}


Terrorist attack in London, day 3 of the Gorsuch hearings, and more from the United States and around the world.
Matt Vasilogambros March 22, 2017, 5:10 p.m.
Nunes's vague statements raised a host of questions, and his decision to announce them publicly and then go to the White House to brief President Trump, having not informed Democrats on the committee about his new findings, cast a pall of politics over the proceedings.
Trump said felt "somewhat vindicated" by the announcement, as former intelligence officials and Democrats on the Hill said the statement from Nunes was inappropriate.
Matt Vasilogambros March 22, 2017, 4:28 p.m.
A possible U.S. airstrike killed 33 civilians in Syria, a monitoring group said Wednesday. The Syrian Observatory for Human Rights, a London-based network trusted by many news organizations, said the U.S.-led coalition airstrike hit a school in northern Syria in a region controlled by ISIS. The school, located in the town of Mansoura, some 15 miles southwest of Raqqa, was being used as a shelter for displaced families from Raqqa, Aleppo, and Homs. Only two people survived the airstrike. U.S. officials have not confirmed whether the airstrike took place. U.S. military personnel were in the area that day airlifting around 500 U.S.-trained Syrian fighters. Fighting remains intense the northern city of Raqqa, the last ISIS stronghold and self-declared capital.
Yasmeen Serhan March 22, 2017, 11:08 a.m.
The U.K. Parliament was placed under lockdown Wednesday after reports emerged of gunfire outside Westminster Palace in central London, according to local media. Details about what exactly happened are not yet known.
This story is developing. For more updates, follow our live blog here.
Krishnadev Calamur March 22, 2017, 8:48 a.m.
Krishnadev Calamur March 22, 2017, 8:22 a.m.
Judge Neil Gorsuch will face questions for the third day from lawmakers on the Senate Judiciary Committee, a day after he went before the panel and defended the independence of the judiciary, but refused to be drawn into more controversial issues such as abortion rights and gun control. As my colleague Matt Ford wrote last night, "attempts by the Democratic senators … to reveal new dimensions of Gorsuch's ideological beliefs were largely unsuccessful." Gorsuch is President Trump's nominee to fill the position on the U.S. Supreme Court made vacant by the death last year of Justice Antonin Scalia. Democrats were angered that President Obama's nominee for the position, Judge Merrick Garland, was not given a hearing by Republicans, who control the Senate. The fourth and final day of the hearings are scheduled for Thursday. Despite some public opposition from Democrats and their supporters, Gorsuch, a widely respected jurist, is expected to be easily confirmed by the Senate.


text:
Codelco military funding change gets closer
The Finance Commission of Chile's Senate has unanimously approved a bill that seeks a new means of financing the nation's armed forces and putting an end to Law 13,196 known as Ley Reservada del Cobre (Restricted Law on Copper).
Product of Chile's Ley Reservada
Copper > Copper-news
The Ley Reservada was enacted in October 1958 and directly allocates 10% of export sales from state copper company Codelco to the Chilean armed forces.
The armed forces also nominate a director to Codelco's board.
Codelco deposits US dollars in three secret accounts for the army, air force and navy at the Central Bank of Chile that are maintained outside the treasury single account and parliamentary oversight.
The minimum contribution expected is US$180 million a year but in periods with high copper prices, such as during the super cycle at the start of the decade, this can increase towards $1 billion.
This funding source has transformed Chile's armed forces into one of the most capable in the region with equipment far superior to any other country in the region, despite its relatively small population of 16 million.
For Codelco, the persistence of the Ley Reservada has restricted the amount of funds it has available for reinvestment at a time when it has a $39-billion, 10-year upgrade portfolio of sustaining and development projects to finance.
It also restricts the company's ability to invest in projects or form joint ventures in other countries as other governments are reticent to potentially indirectly help finance the armed forces of a regional competitor.
The reform initiative marks a renewed attempt by the administration of president Sebastian Piñera to remove the controversial law.
The original bill was filed in May 2011 during his first term as president. It was approved by the Chamber of Deputies, Chile's lower house, in June 2012, and the Senate Defense Commission in January 2013. Piñera restarted the process in August 2018 after amending the original bill.
"We hope that the [Senate] approves [the bill] and that in March we can have approved a change that has been proposed for more than a decade," said defence minister Alberto Espina reported El Mercurio de Antofagasta.
"There is no justification that the strategic capacities of the armed forces, that military is financed from money from copper. This has no sense.
"What is important is that we have adequate financing that is stable because a country that that doesn't take care of its armed forces, doesn't take care of its sovereignty and we have seen that when this occurs one loses political independence."
Musk disses copper, hails lithium refining
Peru miners shutting due to violent turmoil
Copper market tighter than expected, says BofA
Antofagasta copper production down in 2022 on drought
Ley reservada
Sebastian piñera
US military awards Perpetua funds to develop antimony
Will be only US mined source of antimony
OPEC for lithium?
Perpetua gets US Forest Service backing for Stibnite
Codelco losing copper king throne


On 30 July 2010, USCG Group Port Angeles and USCG Sector Seattle combined to form USCG Sector Puget Sound, bringing operational control of all Coast Guard resources located within the Port Puget Sound area of responsibility under one command.
USCG Sector Puget Sound offices are located in the CDR Raymond J. Evans Shore Operations Building at Pier 36 in Seattle, WA. All VHF-FM and HF radio frequencies formerly guarded 24 hours a day by USCG Group Port Angeles and USCG Sector Seattle will now be monitored by USCG Sector Puget Sound.
Welcome to Coast Guard Sector Puget Sound.


text:
Q: Kubernetes + jq - retrieving containers list per pod yields cartesian product Im trying to use jq on kubernetes json output, to create new json object containing list of objects - container and image per pod, however im getting cartesian product.
my input data (truncated from sensitive info):
{
    "apiVersion": "v1",
    "items": [
        {
            "apiVersion": "v1",
            "kind": "Pod",
            "metadata": {
                "creationTimestamp": "2021-06-30T12:45:40Z",
                "name": "pod-1",
                "namespace": "default",
                "resourceVersion": "757679286",
                "selfLink": "/api/v1/namespaces/default/pods/pod-1"
            },
            "spec": {
                "containers": [
                    {
                        "image": "image-1",
                        "imagePullPolicy": "Always",
                        "name": "container-1",
                        "resources": {},
                        "terminationMessagePath": "/dev/termination-log",
                        "terminationMessagePolicy": "File",
                        "volumeMounts": [
                            {
                                "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
                                "readOnly": true
                            }
                        ]
                    },
                    {
                        "image": "image-2",
                        "imagePullPolicy": "Always",
                        "name": "container-2",
                        "resources": {},
                        "terminationMessagePath": "/dev/termination-log",
                        "terminationMessagePolicy": "File",
                        "volumeMounts": [
                            {
                                "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
                                "readOnly": true
                            }
                        ]
                    }
                ],
                "dnsPolicy": "ClusterFirst",
                "enableServiceLinks": true,
                "priority": 0,
                "restartPolicy": "Always",
                "schedulerName": "default-scheduler",
                "securityContext": {},
                "serviceAccount": "default",
                "serviceAccountName": "default",
                "terminationGracePeriodSeconds": 30,
                "tolerations": [
                    {
                        "effect": "NoExecute",
                        "key": "node.kubernetes.io/not-ready",
                        "operator": "Exists",
                        "tolerationSeconds": 300
                    },
                    {
                        "effect": "NoExecute",
                        "key": "node.kubernetes.io/unreachable",
                        "operator": "Exists",
                        "tolerationSeconds": 300
                    }
                ],
                "volumes": [
                    {
                        "name": "default-token-b954f",
                        "secret": {
                            "defaultMode": 420,
                            "secretName": "default-token-b954f"
                        }
                    }
                ]
            },
            "status": {
                "conditions": [
                    {
                        "lastProbeTime": null,
                        "lastTransitionTime": "2021-06-30T12:45:40Z",
                        "status": "True",
                        "type": "Initialized"
                    },
                    {
                        "lastProbeTime": null,
                        "lastTransitionTime": "2021-06-30T12:45:40Z",
                        "message": "containers with unready status: [container-1 container-2]",
                        "reason": "ContainersNotReady",
                        "status": "False",
                        "type": "Ready"
                    },
                    {
                        "lastProbeTime": null,
                        "lastTransitionTime": "2021-06-30T12:45:40Z",
                        "message": "containers with unready status: [container-1 container-2]",
                        "reason": "ContainersNotReady",
                        "status": "False",
                        "type": "ContainersReady"
                    },
                    {
                        "lastProbeTime": null,
                        "lastTransitionTime": "2021-06-30T12:45:40Z",
                        "status": "True",
                        "type": "PodScheduled"
                    }
                ],
                "containerStatuses": [
                    {
                        "image": "image-1",
                        "imageID": "",
                        "lastState": {},
                        "name": "container-1",
                        "ready": false,
                        "restartCount": 0,
                        "started": false,
                        "state": {
                            "waiting": {
                                "message": "Back-off pulling image \"image-1\"",
                                "reason": "ImagePullBackOff"
                            }
                        }
                    },
                    {
                        "image": "image-2",
                        "imageID": "",
                        "lastState": {},
                        "name": "container-2",
                        "ready": false,
                        "restartCount": 0,
                        "started": false,
                        "state": {
                            "waiting": {
                                "message": "Back-off pulling image \"image-2\"",
                                "reason": "ImagePullBackOff"
                            }
                        }
                    }
                ],
                "qosClass": "BestEffort",
                "startTime": "2021-06-30T12:45:40Z"
            }
        }
    ],
    "kind": "List",
    "metadata": {
        "resourceVersion": "",
        "selfLink": ""
    }
}

my command:
jq '.items[] | { "name": .metadata.name, "containers": [{ "name": .spec.containers[].name, "image": .spec.containers[].image }]} '

desired output:
{
  "name": "pod_1",
  "containers": [
    {
      "name": "container_1",
      "image": "image_1"
    },
    {
      "name": "container_2",
      "image": "image_2"
    }
  ]
}

output I get:
{
  "name": "pod-1",
  "containers": [
    {
      "name": "container-1",
      "image": "image-1"
    },
    {
      "name": "container-1",
      "image": "image-2"
    },
    {
      "name": "container-2",
      "image": "image-1"
    },
    {
      "name": "container-2",
      "image": "image-2"
    }
  ]
}

Could anyone explain what am I doing wrong?
Best Regards, Piotr.

A: The problem is "name": .spec.containers[].name and "image": .spec.containers[].image:
Both expressions generate a sequence of each value for name and image which will than be combined.
Simplified example of why you get a Cartesian product:
jq -c -n '{name: ("A", "B"), value: ("C", "D")}'
outputs:
{"name":"A","value":"C"}
{"name":"A","value":"D"}
{"name":"B","value":"C"}
{"name":"B","value":"D"}

You get the desired output using this jq filter on your input:
jq '
  .items[]
  | {
      "name": .metadata.name,
      "containers": .spec.containers
                    | map({name, image})
    }'

output:
{
  "name": "pod-1",
  "containers": [
    {
      "name": "container-1",
      "image": "image-1"
    },
    {
      "name": "container-2",
      "image": "image-2"
    }
  ]
}

redpajama_set_name: RedPajamaStackExchange


text:
Kim Newcombe (Nelson, 2 de enero de 1944 - Oxford, 14 de agosto de 1973) fue un piloto de motociclismo neozeladés, que compitió en el Campeonato del Mundo de Motociclismo durante dos temporadas hasta su muerte en una carrera no oficial en Ozford.

Biografía
Aunque nació en Nelson, Newcombe creció en Auckland y posteriormente se trasladó a Australia (primero Brisbane, luego Melbourne) en 1963, y más tarde a Europa en 1968. Compitió en Mundial de 500 c.c., acabando segundo detrás de Phil Read en la temporada de 1973.

Junto al también piloto John Dodds, desarrolló la motocicleta de dos tiempos diseñada por Dieter König. Ellos fueron los primeros en desafiar el dominio de los MV Agustas después de la marcha de Honda de la competición del Mundial a finales de 1967. A diferencia de sus principales competidores, a Newcombe se le atribuye el honor de desarrollar, construir, mantener y pilotar la máquina König en competición.

El 11 de agosto de 1973, Newcombe salió gravemente herido de una carrera no oficial en el circuito de Silverstone, en la curva Stowe. El día antes de la carrera, Kim hizo su habitual paseo para familiarizarse con el trazado. Le llamó la atención una curva, Stowe, en la que había un charco justo antes de un giro brusco frente a una pared de vigas de madera. Preocupado por la seguridad de los pilotos, se acercó a Vernon Cooper, empleado del evento, para colocar fardos de heno frente a la pared. Cooper se enfureció y lo amenazó con la expulsión de la carrera si se volvía a quejar. Al día siguiente, Kim lideró la carrera durante seis vueltas antes de llegar a Stowe, donde se salió de la pista y chocó contra la pared. Inconsciente, fue atendido in situ antes de ser trasladado a un hospital local.

Kim nunca recobró la conciencia y fue declarada su muerte cerabral el 14 de agosto. Su esposa, Janeen, dio permiso para que le quitaran el soporte vital y donar sus órganos. Tenía 29 años y ocupó el segundo lugar póstumamente en el Mundial de 500cc de 1973, por delante de Agostini y detrás de Phil Read.

La historia de Newcombe fue objeto de un documental en 2006 llamado Love, Speed and Loss dirigido por Justin Pemberton.

Resultados
Sistema de puntuación a partir de 1969:

(Carreras en negrita indica pole position, carreras en cursiva indica vuelta rápida)

Referencias

Pilotos de motociclismo de Nueva Zelanda
Pilotos de 500 c.c.
Pilotos de 250 c.c.
Pilotos fallecidos en competición
Nacidos en Nueva Zelanda
Fallecidos en Northampton

redpajama_set_name: RedPajamaWikipedia


You'll be able to count on Swift Brick Wall to supply the very best expert services for Brick Wall in South Barre, VT. You are looking for the most sophisticated technologies around, and our crew of trained contractors will give you just that. Our products are of the highest quality and we are able to save money. We will help you come up with decisions for your project, address your concerns, and organize an appointment with our professionals when you call us by dialing 844-233-1733.
You've got a price range to adhere to, and you want to lower your expenses. Though, being economical should not indicate that you compromise on quality for Brick Wall in South Barre, VT. We provide you with the very best quality even while helping you save money. Any time you work with our staff, you'll receive the advantage of our own experience and excellent supplies to guarantee that your project will last while saving your time and money. It will be possible because we understand how to help you save time and costs on products and labor. Choose Swift Brick Wall whenever you want the highest quality service at the cheapest price. Dial 844-233-1733 to talk to our customer care representatives, today.
Brick Wall are available in South Barre, VT.
To make the very best judgments on Brick Wall in South Barre, VT, you should be informed. You don't want to go in blindly, and you should be aware of what you should expect. That's the reason why we try to make every effort to be sure that you are aware of the process and are not confronted by any unexpected situations. Step one will be to contact us by dialing 844-233-1733 to arrange your work. We are going to reply to all your questions and concerns and set up your first appointment. We consistently get there at the scheduled time, prepared to work with you.
When you are planning a venture regarding Brick Wall in South Barre, VT, there's lots of great reasons to work with Swift Brick Wall. We've got the top customer satisfaction scores, the very best quality materials, and the most useful and reliable money saving strategies. Our company has the skills you need to fulfill all of your goals. Dial 844-233-1733 when you require Brick Wall in South Barre, and we're going to work with you to expertly complete your project.


Raiders TE Jared Cook had 180 yards and a TD in opener; Jaguars RB T.J. Yeldon thrived in place of injured starter Leonard Fournette.
With a number of significant injuries (and a few surprises) in Week 1, fantasy football owners should expect to see a flurry of activity on the waiver wire.
Generally, it's a good idea to strike early in the season before players' roles become obvious to everyone. However, several teams showed strong tendencies in favor of this week's most popular pickup candidates.
TE Jared Cook, Oakland Raiders ($28). The veteran was the Raiders' only standout on offense in their loss Monday night, catching nine passes for 180 yards. For fantasy owners who just lost Delanie Walker for the season or Greg Olsen indefinitely, Cook makes an excellent replacement.
WR Quincy Enunwa, New York Jets ($23). The absence of Jermaine Kearse opened the door for Enunwa to emerge as rookie QB Sam Darnold's favorite target. He caught six of 10 targets for 63 yards and a score. Presumed No. 1 wideout Robby Anderson had only one target (though it went for a 41-yard touchdown).
WR Chris Godwin, Tampa Bay Buccaneers ($20). Teammate DeSean Jackson got the headlines with his 146 receiving yards and two touchdowns, but he left the game early with concussion symptoms. Godwin (3-41, TD) can easily step into the role of No. 2 wideout behind Mike Evans in what's looking to be a pass-happy Bucs offense.
RB T.J. Yeldon, Jacksonville Jaguars ($18). Yeldon became a major part of the offense when starter Leonard Fournette left with a hamstring injury. He ran for 51 yards on 14 carries and caught three passes for 18 yards and a TD. Fournette says he should be fine for Week 2, but Yeldon proved he's a more-than-capable insurance policy.
RB Austin Ekeler, Los Angeles Chargers ($15). It was supposed to be a one-back show, but Ekeler saw a lot more playing time than expected in the opener. He made the most of his touches, too, accumulating 126 total yards, with five catches and a touchdown.
TE Eric Ebron, Indianapolis Colts ($11). The former first-round pick of the Lions had an excellent debut with the Colts, catching four passes for 51 yards and a touchdown. With QB Andrew Luck sticking to mostly short passes, there might be room in the offense for both Ebron and fellow TE Jack Doyle (7-60).
QB Ryan Fitzpatrick, Tampa Bay Buccaneers ($10). The veteran was this week's brightest fantasy star with his 417 passing yards, four TD passes and one rushing score. But the question is whether he can he keep it up, especially with starter Jameis Winston due back from his suspension in Week 4.
Fantasy owners who are worried about the status of Marcus Mariota or Aaron Rodgers might find Fitzpatrick comforting to have on the bench -- although the Philadelphia Eagles come to town on Sunday.
WR Phillip Dorsett, New England Patriots ($9). The Pats spread around their receiving targets in much the same way they do with backfield touches, but Dorsett's seven catches for 66 yards and a touchdown make him worth considering.
WR Kenny Golladay, Detroit Lions ($8). The second-year wideout snagged seven of 12 targets for 114 yards vs. the Jets. He's clearly the third receiver in Detroit, but if the defense is as bad as it looked in the opener, there will be plenty of opportunities for everyone.
RB Phillip Lindsay, Denver Broncos. The 5-8 rookie spark plug got as many touches as starter Royce Freeman -- and was more effective. Lindsay had 15 carries for 71 yards and also caught two passes for 31 yards and a touchdown.
WR Brandon Marshall, Seattle Seahawks. The 34-year-old veteran resurfaced with three receptions for 46 yards and a TD, and his value increases with top receiver Doug Baldwin sidelined indefinitely with a knee injury.


Come join us for PCNC's 2nd Annual Princeton-Harvard joint evening at the Opera! This event will be co-hosted by PCNC and the Harvard Kennedy School of Government Alumni Network.
This year we will be seeing Turandot by Giacomo Puccini (http://bit.ly/2ynBgau).
What is like ice, but burns like fire?
Turandot—a cold-hearted but exquisitely beautiful princess who challenges her suitors to a deadly game of wits. Only Calaf, an exiled prince, is hot-blooded enough to crack her icy veneer.
Dr. Kip Cranna has served as Director of Music Administration at the Opera for over 30 years and has received various honors and distinctions in his work.
For directions and parking options, click here.
PCNC members and non-members must RSVP for the private reception/talk, which is free. Click here to RSVP. PCNC members will also receive a special discount code to purchase your tickets (30% off regular ticket prices, you select your desired seating) along with a private link. Please contact Michelle directly with any questions.
To join or renew as a PCNC member, fill out the online form and submit payment here before RSVP-ing for this event.
ORANGE and BLACK attire is encouraged!


Corning Incorporated (NYSE: GLW) today announced that Corning® Gorilla® Glass has been chosen by Pebble as the cover glass for the newly launched Pebble Steel smartwatch.
Corning Gorilla Glass, well-known for providing durability and scratch resistance in smartphone, slate and laptop applications, is now bringing those features to the smartwatch category. Compared with sapphire crystal, Corning Gorilla Glass is lighter weight, requires significantly less energy to produce, and transmits more light for better optical clarity.
The Pebble Steel is now available for pre-order from getpebble.com.
Corning will display the new Pebble Steel in booth #11612 located in Central Hall at the 2014 International Consumer Electronics Show (CES).
For more information about Pebble Steel, please visit www.getpebble.com.
For more information about Corning Gorilla Glass, please visit www.corninggorillaglass.com.


Everyone in our house loves this soup. Especially the grandchildren. I love to make it for them when they come over after school. Sometimes I serve it with noodles and sometimes I mash up some of the veggies and meatballs. Whatever way I serve it they love it. This is a recipe I received from my friend VJ. She always makes it for her family and when she doesn't they request it. Really a nice favourite especially on cold winter days.
Who really doesn't like soup? So tasty and healthy for you.
Into a stockpot add 2 boxes of chicken soup, or even better some homemade chicken soup and some water if you want to stretch the soup. Add your meatballs. I use IKEA pork meatballs, then add 2 chopped carrots, 2 ribs of chopped celery, 1 chopped onion, 1 or 2 chopped potatoes, 2 bay leaves, some chopped parsley, 2 palm fulls of pearl barley, and 1 tablespoon salt. Bring all of this to a boil then reduce heat and simmer for approximately 1 1/2 -2 hours. Until your barley is cooked and also all of your veggies. Mash some of the contents. That's all there is to it. You can add the meatballs frozen, it just might take a little longer to cook. Serve in bowls and enjoy!
Place all the ingredients into a stockpot. You can add water if you want to stretch the soup. Bring to a boil then reduce and simmer for approx. 2 hours partially covered. When veggies, barley and meatballs are cooked then it is ready. Take a potato masher and mash some of the contents in the soup. Serve with noodles or crusty rolls.


Our self-enhancing activities for kids give them a fun and lively learning experience.
All our indoor and outdoor activities are specially designed for school-aged kids, preparing them for a school-setting environment. We make sure that in every activity, kids can gain new learning insight.
We are committed to providing timely and effective communication with parents about their child's activities while they are in our care. So we offer parents a free and secure mobile application – myKidzDay – which provides access to information about their kid's daily activity on smart phones and tablets. This free, eco-friendly, award-winning innovative app is available on all iOS and Android phones/tablets and allows to receive notifications, reminders, pictures and documents, review newsletters, schedules, etc. while eliminating paper and reducing our carbon footprint.


The new building at the Gymnasium in Nyon. Struggled to find a good angle.
Paweł Kadysz It's been a great week for you I guess. Very nice photos.
Ian Prince Well thanks Paweł! What I've noticed is the better photos come in "batches"...as do the worse one's too! Not sure why, but that's part of the magic of daily photography.
John Bastoen Wonderfull scene. Love the lines and the cold colors!
Ewa Kudlaty Fantastic as always!
Magda Ko struggled but succeeded, I love the tones as well.
Daniel Zaleski Great point of view, composition, lines, ligth & shadow, the blue / cyan tint. I love it!
Ian Prince Thanks Gogi !
Satoshi T Nice to find this awesome angle!
Ian Prince Thanks Satoshi !