text:
info@kayakbasquecountry.com
GUIDED ROUTES
Copia de GROUPS
KAYAK BASQUE COUNTRY
(+34) 679600839 - Aitor
We are a young company, very motivated and eager to show our clients all we know.
"DON´T STAY AT HOME, GO OUT AND LOOK FOR YOUR ADVENTURE"
THE SPIRIT OF KAYAK BASQUE COUNTRY
We do what we love, after more than 15 years of experience in the world of kayaking competing and traveling around the world, we want to let people know our passion. You will meet professional and very experienced kayak guides, high class material and spectacular activities that will make you spend very special time in contact with the nature.
AITOR GOIKOETXEA
Aitor Goikoetxea was born in San Sebastian on 10-09-1990 and since he was 8 years old he has been involve in the kayaking community because of his brothers. That´s why he will always be grateful to them.
He is graduate in Business Administration and Management and holds the titles of Sports Technician level 2 of "White water guide" and "national white water trainer" level 3. He has also worked as a national trainer at the National High Performance Center located in León.
Now, he decided to create the company KAYAK BASQUE COUNTRY with the objective to show people the most beautiful places of the Basque Country that can only be appreciated if you approach by kayak..
Since he was 16 he has been a member of the spanish national team, first in c2 (2 sited canoe), in wich he has participated in different championships (world champ., European champ...) and after this in freestyle where he have obtained very good results, like his bronze medal ind the world championship or his silver and bronze medal in the European championships.
BEST RESULTS:
- 2º y 3º in the European championships in c1 and oc1 categories (Lienz) 2012
- 3º in the world championship in c1 category (Plattling) 2011
- Spanish champion in c2 category 2010/2018
- Semifinalist in the European u23 championship in slalom 2009
In addition, he has made several trips around the world. His first big trip was at the age of 19 in Uganda which he describes as "an authentic adventure, in a extraordinary country with epic rivers.
HIS TRIPS:
- Uganda 2009
- Ecuador 2010
- Canada 2013
- Usa 2013
- Patagonia 2014
- Córsica 2015
- Greenland 2016
- Chile 2018
IRATI GOIKOETXEA
Irati Goikoetxea nació en San Sebastián el 10-04-1986 y desde que tenía 8 años ha estado envuelto en el mundo del piraguismo hasta hoy en día.
Es graduada en Magisterio en lengua extranjera y en psicopedagogía además de tener el master de CAP. Cuenta también con el título nivel 3 de entrenadora de piraguismo nacional.
Es una de las piraguistas con más años de experiencia dentro del equipo nacional de slalom habiendo obtenido muchos éxitos. Además ha sido reserva para las olimpiadas de Londres.
MEJORES RESULTADOS:


N 52, 47.820 W 1, 28.777 A small l.r. near Calke Abbey. No traffic overnight when we stayed there . Up to 3.5 tonnes, anything bigger might struggle.
N 52, 52.286 W 1, 43.374 A small l.r. near Sudbury Hall. Not much traffic and big enough for up to 7.5 tonners.
We got toally lost and couldn't find it so ended up stopping in a layby nearby next to what we think was the cricket club / village hall. It was busyish until about 9 then it went quiet. It was open to the road but as a last resort it was perfect! The lane to the side just goes into a field.


Midsummer Birch fills your sauna with summery fragrances of lush nature and fresh birch leaves.
Fresh birch leaves, smoky fragrance of a warming sauna... Let the Rento Sauna scents heighten your senses! Add scent to the water and throw on the hot sauna stove for aromatic steam. Test the scent first by using a small amount. You can also mix various scents. Always dilute with water.
Aromatic sauna experience: Add 2 to 4 cap fulls to a sauna bucket full of water. Shake before use. Rinse the bucket after use. Don't leave the bottle in a hot sauna.


text:
#include <iomanip>
#include <sstream>

#include "debug/Dtu.hh"
#include "debug/DtuBuf.hh"
#include "debug/DtuCmd.hh"
#include "debug/DtuPackets.hh"
#include "debug/DtuSysCalls.hh"
#include "debug/DtuMem.hh"
#include "debug/DtuCpuReq.hh"
#include "debug/DtuXlate.hh"
#include "mem/dtu/dtu.hh"
#include "mem/dtu/msg_unit.hh"
#include "mem/dtu/mem_unit.hh"
#include "mem/dtu/xfer_unit.hh"
#include "mem/dtu/pt_unit.hh"
#include "mem/cache/cache.hh"
#include "sim/dtu_memory.hh"
#include "sim/system.hh"

static const char *cmdNames[] =
{
    "IDLE",
    "SEND",
    "REPLY",
    "READ",
    "WRITE",
    "FETCH_MSG",
    "ACK_MSG",
    "SLEEP",
    "PRINT",
};

static const char *extCmdNames[] =
{
    "IDLE",
    "WAKEUP_CORE",
    "INV_EP",
    "INV_PAGE",
    "INV_TLB",
    "RESET",
    "ACK_MSG",
    "FLUSH_CACHE",
};

// cmdId = 0 is reserved for "no command"
// cmdId = 1 is reserved for a dummy command (waiting for remote xfers)
uint64_t Dtu::nextCmdId = 2;

Dtu::Dtu(DtuParams* p)
  : BaseDtu(p),
    masterId(p->system->getMasterId(this, name())),
    system(p->system),
    regFile(*this, name() + ".regFile", p->num_endpoints, p->num_header),
    connector(p->connector),
    tlBuf(p->tlb_entries > 0 ? new DtuTlb(*this, p->tlb_entries) : NULL),
    msgUnit(new MessageUnit(*this)),
    memUnit(new MemoryUnit(*this)),
    xferUnit(new XferUnit(*this, p->block_size, p->buf_count, p->buf_size)),
    ptUnit(p->pt_walker ? new PtUnit(*this) : NULL),
    abortCommandEvent(*this),
    completeTranslateEvent(*this),
    sleepStart(0),
    cmdPkt(),
    cmdFinish(),
    cmdId(0),
    abortCmd(0),
    cmdXferBuf(0),
    xlates(),
    coreXlates(new CoreTranslation[p->buf_count + 1]()),
    coreXlateSlots(p->buf_count + 1),
    memPe(),
    memOffset(),
    atomicMode(p->system->isAtomicMode()),
    numEndpoints(p->num_endpoints),
    maxNocPacketSize(p->max_noc_packet_size),
    blockSize(p->block_size),
    bufCount(p->buf_count),
    bufSize(p->buf_size),
    reqCount(p->req_count),
    cacheBlocksPerCycle(p->cache_blocks_per_cycle),
    registerAccessLatency(p->register_access_latency),
    cpuToCacheLatency(p->cpu_to_cache_latency),
    commandToNocRequestLatency(p->command_to_noc_request_latency),
    startMsgTransferDelay(p->start_msg_transfer_delay),
    transferToMemRequestLatency(p->transfer_to_mem_request_latency),
    transferToNocLatency(p->transfer_to_noc_latency),
    nocToTransferLatency(p->noc_to_transfer_latency)
{
    assert(p->buf_size >= maxNocPacketSize);

    DTUMemory *sys = dynamic_cast<DTUMemory*>(system);
    if (sys)
    {
        NocAddr phys = sys->getPhys(0);
        memPe = phys.coreId;
        memOffset = phys.offset;
        memSize = sys->memSize;
        DPRINTF(Dtu, "Using memory range %p .. %p\n",
            memOffset, memOffset + memSize);

        regs().set(DtuReg::ROOT_PT, sys->getRootPt().getAddr());
    }
    // memory PEs don't participate in cache coherence
    else
        coherent = false;

    regs().set(DtuReg::VPE_ID, INVALID_VPE_ID);
}

Dtu::~Dtu()
{
    delete ptUnit;
    delete xferUnit;
    delete memUnit;
    delete msgUnit;
    delete tlBuf;
}

void
Dtu::regStats()
{
    BaseDtu::regStats();

    nocMsgRecvs
        .name(name() + ".nocMsgRecvs")
        .desc("Number of received messages");
    nocReadRecvs
        .name(name() + ".nocReadRecvs")
        .desc("Number of received read requests");
    nocWriteRecvs
        .name(name() + ".nocWriteRecvs")
        .desc("Number of received write requests");

    regFileReqs
        .name(name() + ".regFileReqs")
        .desc("Number of requests to the register file");
    intMemReqs
        .name(name() + ".intMemReqs")
        .desc("Number of requests to the internal memory");
    extMemReqs
        .name(name() + ".extMemReqs")
        .desc("Number of requests to the external memory");
    irqInjects
        .name(name() + ".irqInjects")
        .desc("Number of injected IRQs");
    resets
        .name(name() + ".resets")
        .desc("Number of resets");

    commands
        .init(sizeof(cmdNames) / sizeof(cmdNames[0]))
        .name(name() + ".commands")
        .desc("The executed commands")
        .flags(Stats::total | Stats::nozero);
    for (size_t i = 0; i < sizeof(cmdNames) / sizeof(cmdNames[0]); ++i)
        commands.subname(i, cmdNames[i]);

    extCommands
        .init(sizeof(extCmdNames) / sizeof(extCmdNames[0]))
        .name(name() + ".extCommands")
        .desc("The executed external commands")
        .flags(Stats::total | Stats::nozero);
    for (size_t i = 0; i < sizeof(extCmdNames) / sizeof(extCmdNames[0]); ++i)
        extCommands.subname(i, extCmdNames[i]);

    xlateReqs
        .name(name() + ".xlateReqs")
        .desc("Number of translate requests to the core");
    xlateDelays
        .name(name() + ".xlateDelays")
        .desc("Number of delayed translate requests to the core");
    xlateFails
        .name(name() + ".xlateFails")
        .desc("Number of failed translate requests to the core");

    if (tlb())
        tlb()->regStats();
    if (ptUnit)
        ptUnit->regStats();
    xferUnit->regStats();
    memUnit->regStats();
    msgUnit->regStats();
}

bool
Dtu::isMemPE(unsigned pe) const
{
    DTUMemory *sys = dynamic_cast<DTUMemory*>(system);
    return !sys || sys->hasMem(pe);
}

PacketPtr
Dtu::generateRequest(Addr paddr, Addr size, MemCmd cmd)
{
    Request::Flags flags;

    auto req = std::make_shared<Request>(paddr, size, flags, masterId);

    auto pkt = new Packet(req, cmd);

    if (size)
    {
        auto pktData = new uint8_t[size];
        pkt->dataDynamic(pktData);
    }

    return pkt;
}

void
Dtu::freeRequest(PacketPtr pkt)
{
    delete pkt;
}

void
Dtu::executeCommand(PacketPtr pkt)
{
    Command::Bits cmd = getCommand();
    if (cmd.opcode == Command::IDLE)
    {
        if (pkt)
            schedCpuResponse(pkt, clockEdge(Cycles(1)));
        return;
    }

    assert(cmdId == 0);

    cmdPkt = pkt;
    cmdId = nextCmdId++;
    cmdSent = false;
    commands[static_cast<size_t>(cmd.opcode)]++;

    assert(cmd.epid < numEndpoints);
    DPRINTF(DtuCmd, "Starting command %s with EP=%u, flags=%#x arg=%#lx (id=%llu)\n",
            cmdNames[static_cast<size_t>(cmd.opcode)], cmd.epid,
            cmd.flags, cmd.arg, cmdId);

    switch (cmd.opcode)
    {
        case Command::SEND:
        case Command::REPLY:
            msgUnit->startTransmission(cmd);
            break;
        case Command::READ:
            memUnit->startRead(cmd);
            break;
        case Command::WRITE:
            memUnit->startWrite(cmd);
            break;
        case Command::FETCH_MSG:
            regs().set(CmdReg::OFFSET, msgUnit->fetchMessage(cmd.epid));
            finishCommand(Error::NONE);
            break;
        case Command::ACK_MSG:
            msgUnit->ackMessage(cmd.epid, cmd.arg);
            finishCommand(Error::NONE);
            break;
        case Command::SLEEP:
            if (!startSleep(cmd.arg))
                finishCommand(Error::NONE);
            break;
        case Command::PRINT:
        {
            const DataReg data = regs().getDataReg();
            printLine(data.addr, data.size);
            finishCommand(Error::NONE);
        }
        break;
        default:
            // TODO error handling
            panic("Invalid opcode %#x\n", static_cast<RegFile::reg_t>(cmd.opcode));
    }

    if(cmd.opcode == Command::SEND || cmd.opcode == Command::REPLY ||
       cmd.opcode == Command::READ || cmd.opcode == Command::WRITE)
    {
        schedCpuResponse(cmdPkt, clockEdge(Cycles(1)));
        cmdPkt = nullptr;
    }
}

void
Dtu::abortCommand()
{
    Command::Bits cmd = getCommand();
    abortCmd = regs().get(CmdReg::ABORT);

    if ((abortCmd & Command::ABORT_CMD) && cmd.opcode != Command::IDLE)
    {
        DPRINTF(DtuCmd, "Aborting command %s with EP=%u, flags=%#x (id=%llu)\n",
                cmdNames[static_cast<size_t>(cmd.opcode)], cmd.epid,
                cmd.flags, cmdId);
    }

    if (abortCmd & Command::ABORT_VPE)
    {
        DPRINTF(DtuCmd, "Disabling communication and aborting PFs\n");

        RegFile::reg_t val = regs().get(DtuReg::FEATURES);
        val |= static_cast<RegFile::reg_t>(Features::COM_DISABLED);
        regs().set(DtuReg::FEATURES, val);

        if (ptUnit)
            ptUnit->abortAll();
    }

    cmdXferBuf = -1;
    uint types = 0;
    if (abortCmd & Command::ABORT_CMD)
        types |= XferUnit::ABORT_LOCAL;
    if (abortCmd & Command::ABORT_VPE)
    {
        types |= XferUnit::ABORT_REMOTE;
        cmdXferBuf = -1;
    }
    xferUnit->abortTransfers(types);

    regs().set(CmdReg::ABORT, cmdXferBuf);

    // if no command was running, let the SW wait until the currently received
    // messages are finished
    Error err = static_cast<Error>(static_cast<uint>(cmd.error));
    if (cmd.opcode == Command::IDLE)
    {
        if (abortCmd & Command::ABORT_VPE)
        {
            regs().set(CmdReg::COMMAND, Command::PRINT);
            cmdId = 1;
        }
        // all done
        else
            abortCmd = 0;
    }
    // reads/writes are aborted immediately
    else if(cmd.opcode == Command::READ || cmd.opcode == Command::WRITE)
    {
        cmdId = 0;
        err = Error::ABORT;
    }
    // message sends are aborted, if they haven't been sent yet
    else if (!cmdSent && (cmd.opcode == Command::SEND || cmd.opcode == Command::REPLY))
        err = Error::ABORT;

    if (cmd.opcode == Command::IDLE ||
        cmd.opcode == Command::READ ||
        cmd.opcode == Command::WRITE ||
        !cmdSent)
        scheduleFinishOp(Cycles(1), err);
}

void
Dtu::scheduleFinishOp(Cycles delay, Error error)
{
    if (getCommand().opcode != Command::IDLE)
    {
        if (cmdFinish)
        {
            deschedule(cmdFinish);
            delete cmdFinish;
        }

        cmdFinish = new FinishCommandEvent(*this, error);
        schedule(cmdFinish, clockEdge(delay));
    }
}

void
Dtu::finishCommand(Error error)
{
    Command::Bits cmd = getCommand();

    cmdFinish = NULL;

    if (abortCmd)
    {
        // try to abort everything
        uint types = 0;
        if (abortCmd & Command::ABORT_CMD)
            types |= XferUnit::ABORT_LOCAL;
        if (abortCmd & Command::ABORT_VPE)
            types |= XferUnit::ABORT_REMOTE;
        if (!xferUnit->abortTransfers(types))
        {
            // okay, retry later
            scheduleFinishOp(Cycles(1), error);
            return;
        }

        abortCmd = 0;
    }

    if (cmd.opcode == Command::SEND)
        msgUnit->finishMsgSend(error, cmd.epid);
    else if (cmd.opcode == Command::REPLY)
        msgUnit->finishMsgReply(error, cmd.epid, cmd.arg);
    else if (error == Error::NONE && !abortCmd &&
             (cmd.opcode == Command::READ || cmd.opcode == Command::WRITE))
    {
        const DataReg data = regs().getDataReg();
        if (data.size > 0)
        {
            if (cmd.opcode == Command::READ)
                memUnit->startRead(cmd);
            else
                memUnit->startWrite(cmd);
            return;
        }
    }

    if (cmd.opcode == Command::SLEEP)
        stopSleep();

    DPRINTF(DtuCmd, "Finished command %s with EP=%u, flags=%#x (id=%llu) -> %u\n",
            cmdNames[static_cast<size_t>(cmd.opcode)], cmd.epid, cmd.flags,
            cmdId, static_cast<uint>(error));

    // let the SW know that the command is finished
    cmd = 0;
    cmd.error = static_cast<unsigned>(error);
    cmd.opcode = Command::IDLE;
    regFile.set(CmdReg::COMMAND, cmd);

    if (cmdPkt)
        schedCpuResponse(cmdPkt, clockEdge(Cycles(1)));

    cmdPkt = NULL;
    cmdId = 0;
}

Dtu::ExternCommand
Dtu::getExternCommand()
{
    auto reg = regFile.get(DtuReg::EXT_CMD);

    ExternCommand cmd;
    cmd.opcode = static_cast<ExternCommand::Opcode>(reg & 0x7);
    cmd.arg = reg >> 3;
    return cmd;
}

void
Dtu::executeExternCommand(PacketPtr pkt)
{
    ExternCommand cmd = getExternCommand();

    extCommands[static_cast<size_t>(cmd.opcode)]++;

    Cycles delay(1);

    Error result = Error::NONE;

    switch (cmd.opcode)
    {
        case ExternCommand::IDLE:
            break;
        case ExternCommand::WAKEUP_CORE:
            wakeupCore();
            break;
        case ExternCommand::INV_EP:
            if (!regs().invalidate(cmd.arg))
                result = Error::MISS_CREDITS;
            break;
        case ExternCommand::INV_PAGE:
            if (tlb())
                tlb()->remove(cmd.arg);
            break;
        case ExternCommand::INV_TLB:
            if (tlb())
                tlb()->clear();
            break;
        case ExternCommand::RESET:
            delay += reset(cmd.arg & 0x0FFFFFFFFFFFFFFF, !!(cmd.arg >> 60));
            break;
        case ExternCommand::FLUSH_CACHE:
            delay += flushInvalCaches(false);
            break;
        case ExternCommand::ACK_MSG:
        {
            unsigned epid = cmd.arg & ((1 << 8) - 1);
            msgUnit->ackMessage(epid, cmd.arg >> 8);
            break;
        }
        default:
            // TODO error handling
            panic("Invalid opcode %#x\n", static_cast<RegFile::reg_t>(cmd.opcode));
    }

    if (pkt)
    {
        auto senderState = dynamic_cast<NocSenderState*>(pkt->senderState);
        assert(senderState != nullptr);
        senderState->result = result;
        schedNocResponse(pkt, clockEdge(delay));
    }

    DPRINTF(DtuCmd, "Executing extern command %s with arg=%p -> %u\n",
            extCmdNames[static_cast<size_t>(cmd.opcode)], cmd.arg,
            (unsigned)result);

    // set external command back to IDLE
    regFile.set(DtuReg::EXT_CMD,
        static_cast<RegFile::reg_t>(ExternCommand::IDLE));
}

bool
Dtu::startSleep(uint64_t cycles)
{
    if ((regFile.get(DtuReg::MSG_CNT) & 0xFFFF) > 0)
        return false;
    if (regFile.get(ReqReg::EXT_REQ) != 0)
        return false;
    if (regFile.get(ReqReg::XLATE_REQ) != 0)
        return false;

    // remember when we started
    sleepStart = curCycle();

    DPRINTF(Dtu, "Suspending CU\n");
    connector->suspend();

    if (cycles)
        scheduleFinishOp(Cycles(cycles));
    return true;
}

void
Dtu::stopSleep()
{
    if (sleepStart != 0)
    {
        // increase idle time in status register
        RegFile::reg_t counter = regFile.get(DtuReg::IDLE_TIME);
        counter += curCycle() - sleepStart;
        regFile.set(DtuReg::IDLE_TIME, counter);

        sleepStart = Cycles(0);

        DPRINTF(Dtu, "Waking up CU\n");
        connector->wakeup();
    }
}

void
Dtu::wakeupCore()
{
    if (getCommand().opcode == Command::SLEEP)
        scheduleFinishOp(Cycles(1));
    else
    {
        // something needs the CU's attention, so remember that we were not idling
        RegFile::reg_t val = regs().get(DtuReg::FEATURES);
        val &= ~static_cast<RegFile::reg_t>(Features::IRQ_WAKEUP);
        regs().set(DtuReg::FEATURES, val);

        connector->wakeup();
    }
}

Cycles
Dtu::reset(Addr entry, bool flushInval)
{
    Cycles delay = flushInval ? flushInvalCaches(true) : Cycles(0);

    // hard-abort everything
    xferUnit->abortTransfers(
        XferUnit::ABORT_LOCAL | XferUnit::ABORT_REMOTE | XferUnit::ABORT_MSGS);

    if(ptUnit)
        ptUnit->abortAll();

    if (tlb())
        tlb()->clear();

    regs().resetHeader();

    Addr rootpt = ptUnit ? 0 : nocToPhys(regs().get(DtuReg::ROOT_PT));
    connector->reset(entry, rootpt);

    // since we did a reset & suspend, restart the sleep
    sleepStart = curCycle();

    resets++;
    return delay;
}

Cycles
Dtu::flushInvalCaches(bool invalidate)
{
    Cycles delay(0);
    if(!coherent)
    {
        for (auto &c : caches)
        {
            c->memWriteback();
            if (invalidate)
                c->memInvalidate();
            delay += Cycles(c->getBlockCount() / cacheBlocksPerCycle);
        }
    }
    return delay;
}

void
Dtu::setIrq()
{
    RegFile::reg_t val = regs().get(DtuReg::FEATURES);
    if (getCommand().opcode == Command::SLEEP)
        val |= static_cast<RegFile::reg_t>(Features::IRQ_WAKEUP);
    else
        val &= ~static_cast<RegFile::reg_t>(Features::IRQ_WAKEUP);
    regs().set(DtuReg::FEATURES, val);

    wakeupCore();

    connector->setIrq();

    irqInjects++;
}

void
Dtu::clearIrq()
{
    connector->clearIrq();
}

void
Dtu::printLine(Addr addr, Addr size)
{
    char buffer[256];
    size_t pos = 0;
    size_t rem = std::min(sizeof(buffer) - 1, size);
    while (rem > 0)
    {
        size_t off = addr & (system->cacheLineSize() - 1);
        size_t amount = std::min(rem, system->cacheLineSize() - off);

        NocAddr phys(addr);
        if(tlb() && ptUnit)
        {
            DtuTlb::Result res = tlb()->lookup(addr, DtuTlb::READ, &phys);
            assert(res != DtuTlb::PAGEFAULT);
            assert(res != DtuTlb::NOMAP);

            if(res == DtuTlb::MISS)
            {
                int xlate = ptUnit->translateFunctional(addr, DtuTlb::READ, &phys);
                assert(xlate == 1);
            }
        }

        auto pkt = generateRequest(phys.getAddr(), amount, MemCmd::ReadReq);
        dcacheMasterPort.sendFunctional(pkt);

        for(size_t i = 0; i < amount; ++i)
        {
            // ignore newlines. we have our own at the end
            if(pkt->getPtr<char>()[i] != '\n')
                buffer[pos++] = pkt->getPtr<char>()[i];
        }

        freeRequest(pkt);

        rem -= amount;
        addr += amount;
    }
    buffer[pos] = '\0';

    DPRINTF(Dtu, "PRINT: %s\n", buffer);
}

void
Dtu::sendMemRequest(PacketPtr pkt,
                    Addr virt,
                    Addr data,
                    MemReqType type,
                    Cycles delay)
{
    auto senderState = new MemSenderState();
    senderState->data = data;
    senderState->mid = pkt->req->masterId();
    senderState->type = type;

    // ensure that this packet has our master id (not the id of a master in
    // a different PE)
    pkt->req->setMasterId(masterId);

    pkt->pushSenderState(senderState);

    if (atomicMode)
    {
        sendAtomicMemRequest(pkt);
        completeMemRequest(pkt);
    }
    else
    {
        schedMemRequest(pkt, clockEdge(delay));
    }
}

void
Dtu::sendNocRequest(NocPacketType type,
                    PacketPtr pkt,
                    uint vpeId,
                    uint flags,
                    Cycles delay,
                    bool functional)
{
    auto senderState = new NocSenderState();
    senderState->packetType = type;
    senderState->result = Error::NONE;
    senderState->vpeId = vpeId;
    senderState->flags = flags;
    if (regFile.hasFeature(Features::PRIV))
        senderState->flags |= NocFlags::PRIV;
    senderState->cmdId = cmdId;

    pkt->pushSenderState(senderState);

    if (functional)
    {
        sendFunctionalNocRequest(pkt);
        completeNocRequest(pkt);
    }
    else if (atomicMode)
    {
        sendAtomicNocRequest(pkt);
        completeNocRequest(pkt);
    }
    else
    {
        schedNocRequest(pkt, clockEdge(delay));
    }
}

void
Dtu::sendNocResponse(PacketPtr pkt)
{
    pkt->makeResponse();

    if (!atomicMode)
    {
        Cycles delay = ticksToCycles(
            pkt->headerDelay + pkt->payloadDelay);
        delay += nocToTransferLatency;

        pkt->headerDelay = 0;
        pkt->payloadDelay = 0;

        schedNocRequestFinished(clockEdge(Cycles(1)));
        schedNocResponse(pkt, clockEdge(delay));
    }
}

Addr
Dtu::physToNoc(Addr phys) const
{
    Addr noc = phys;
    if (!ptUnit)
        noc = (noc & ~0x0000FF0000000000ULL) | ((noc & 0x0000FF0000000000ULL) << 16);
    return noc;
}

Addr
Dtu::nocToPhys(Addr noc) const
{
    Addr phys = noc;
    if (!ptUnit)
        phys = (phys & ~0xFF00000000000000ULL) | ((phys & 0xFF00000000000000ULL) >> 16);
    return phys;
}

void
Dtu::startTransfer(void *event, Cycles delay)
{
    auto ev = reinterpret_cast<XferUnit::TransferEvent*>(event);
    xferUnit->startTransfer(ev, delay);
}

void
Dtu::startTranslate(size_t id,
                    Addr virt,
                    uint access,
                    PtUnit::Translation *trans)
{
    if (ptUnit)
        ptUnit->startTranslate(virt, access, trans);
    else
    {
        if (coreXlates[id].trans)
            return;

        coreXlates[id].trans = trans;
        coreXlates[id].virt = virt;
        coreXlates[id].access = access;
        coreXlates[id].ongoing = false;

        DPRINTF(DtuXlate, "Translation[%lu] = %p:%#x\n",
            id, virt, access);
        xlateReqs++;

        if(regs().get(ReqReg::XLATE_REQ) == 0)
        {
            const Addr mask = DtuTlb::PAGE_MASK;
            const Addr virtPage = coreXlates[id].virt & ~mask;
            regs().set(ReqReg::XLATE_REQ,
                virtPage | coreXlates[id].access | (id << 5));
            coreXlates[id].ongoing = true;

            DPRINTF(DtuXlate, "Translation[%lu] started\n", id);
            setIrq();
        }
        else
            xlateDelays++;
    }
}

void
Dtu::completeTranslate()
{
    RegFile::reg_t resp = regs().get(ReqReg::XLATE_RESP);
    if (resp)
    {
        size_t id = (resp >> 5) & 0x7;
        Addr mask = (resp & DtuTlb::LARGE) ? DtuTlb::LPAGE_MASK
                                           : DtuTlb::PAGE_MASK;
        assert(coreXlates[id].trans);
        assert(coreXlates[id].ongoing);
        DPRINTF(DtuXlate, "Translation[%lu] done\n", id);

        NocAddr phys((resp & ~mask) | (coreXlates[id].virt & mask));
        uint flags = resp & (DtuTlb::IRWX | DtuTlb::LARGE);
        if (flags == 0)
        {
            coreXlates[id].trans->finished(false, phys);
            xlateFails++;
        }
        else
        {
            tlb()->insert(coreXlates[id].virt, phys, flags);
            coreXlates[id].trans->finished(true, phys);
        }

        coreXlates[id].trans = nullptr;
        regs().set(ReqReg::XLATE_RESP, 0);
    }

    if (regs().get(ReqReg::XLATE_REQ) == 0)
    {
        for (size_t id = 0; id < coreXlateSlots; ++id)
        {
            if (coreXlates[id].trans && !coreXlates[id].ongoing)
            {
                const Addr mask = DtuTlb::PAGE_MASK;
                const Addr virtPage = coreXlates[id].virt & ~mask;
                regs().set(ReqReg::XLATE_REQ,
                    virtPage | coreXlates[id].access | (id << 5));
                coreXlates[id].ongoing = true;
                DPRINTF(DtuXlate, "Translation[%lu] started\n", id);

                setIrq();
                break;
            }
        }
    }
}

void
Dtu::abortTranslate(size_t id, PtUnit::Translation *trans)
{
    if (ptUnit)
        ptUnit->abortTranslate(trans);
    else
    {
        if (coreXlates[id].ongoing)
            regs().set(ReqReg::XLATE_REQ, 0);
        coreXlates[id].trans = NULL;
        coreXlates[id].ongoing = false;
        cmdXferBuf = id;
    }
}

void
Dtu::handlePFResp(PacketPtr pkt)
{
    ptUnit->finishPagefault(pkt);
}

void
Dtu::completeNocRequest(PacketPtr pkt)
{
    auto senderState = dynamic_cast<NocSenderState*>(pkt->popSenderState());

    if (senderState->packetType == NocPacketType::CACHE_MEM_REQ)
    {
        // as these target memory PEs, there can't be any error
        assert(senderState->result == Error::NONE);

        NocAddr noc(pkt->getAddr());
        DPRINTF(DtuMem,
            "Finished %s request of LLC for %u bytes @ %d:%#x\n",
            pkt->isRead() ? "read" : "write",
            pkt->getSize(), noc.coreId, noc.offset);

        if(pkt->isRead())
            printPacket(pkt);

        if (dynamic_cast<InitSenderState*>(pkt->senderState))
        {
            // undo the change from handleCacheMemRequest
            pkt->setAddr(noc.offset - memOffset);
            pkt->req->setPaddr(noc.offset - memOffset);
            pkt->popSenderState();
        }

        if (!ptUnit)
        {
            // translate NoC address to physical address
            Addr phys = nocToPhys(pkt->getAddr());
            pkt->setAddr(phys);
            pkt->req->setPaddr(phys);
        }

        sendCacheMemResponse(pkt, true);
    }
    else if (senderState->packetType == NocPacketType::PAGEFAULT)
    {
        if (senderState->result != Error::NONE)
            ptUnit->sendingPfFailed(pkt, static_cast<int>(senderState->result));
    }
    else if (senderState->packetType != NocPacketType::CACHE_MEM_REQ_FUNC)
    {
        // ignore responses for aborted commands
        if (senderState->cmdId == cmdId)
        {
            if (pkt->isWrite())
                memUnit->writeComplete(getCommand(), pkt, senderState->result);
            else if (pkt->isRead())
                memUnit->readComplete(getCommand(), pkt, senderState->result);
            else
                panic("unexpected packet type\n");
        }
        else
        {
            DPRINTF(Dtu,"Ignoring response for cmdId=%llu (current=%llu)\n",
                    senderState->cmdId, cmdId);
        }
    }

    delete senderState;
}

void
Dtu::completeMemRequest(PacketPtr pkt)
{
    assert(!pkt->isError());
    assert(pkt->isResponse());

    auto senderState = dynamic_cast<MemSenderState*>(pkt->popSenderState());

    // set the old master id again
    pkt->req->setMasterId(senderState->mid);

    switch(senderState->type)
    {
        case MemReqType::TRANSFER:
            xferUnit->recvMemResponse(senderState->data, pkt);
            break;

        case MemReqType::TRANSLATION:
            ptUnit->recvFromMem(senderState->data, pkt);
            break;
    }

    delete senderState;
    freeRequest(pkt);
}

void
Dtu::handleNocRequest(PacketPtr pkt)
{
    assert(!pkt->isError());

    if (pkt->cacheResponding())
    {
        DPRINTF(DtuPackets, "Ignoring packet, because cache is responding\n");
        schedNocRequestFinished(clockEdge(Cycles(1)));
        return;
    }

    auto senderState = dynamic_cast<NocSenderState*>(pkt->senderState);

    Error res = Error::NONE;

    switch (senderState->packetType)
    {
        case NocPacketType::MESSAGE:
        case NocPacketType::PAGEFAULT:
        {
            nocMsgRecvs++;
            uint flags = senderState->flags;
            res = msgUnit->recvFromNoc(pkt, senderState->vpeId, flags);
            break;
        }
        case NocPacketType::READ_REQ:
        case NocPacketType::WRITE_REQ:
        case NocPacketType::CACHE_MEM_REQ:
        {
            if (senderState->packetType == NocPacketType::READ_REQ)
                nocReadRecvs++;
            else if (senderState->packetType == NocPacketType::WRITE_REQ)
                nocWriteRecvs++;
            uint flags = senderState->flags;
            res = memUnit->recvFromNoc(pkt, senderState->vpeId, flags);
            break;
        }
        case NocPacketType::CACHE_MEM_REQ_FUNC:
            memUnit->recvFunctionalFromNoc(pkt);
            break;
        default:
            panic("Unexpected NocPacketType\n");
    }

    senderState->result = res;
}

bool
Dtu::handleCpuRequest(PacketPtr pkt,
                      DtuSlavePort &sport,
                      DtuMasterPort &mport,
                      bool icache,
                      bool functional)
{
    bool res = true;
    bool delayed = false;
    Addr virt = pkt->getAddr();

    DPRINTF(DtuCpuReq, "%s access for %#lx: start\n",
        pkt->cmdString(), virt);

    if (mmioRegion.contains(virt))
    {
        // not supported here
        assert(!functional);

        if (icache)
            res = false;
        else
            forwardRequestToRegFile(pkt, true);
    }
    else
    {
        intMemReqs++;

        MemTranslation *trans = nullptr;
        int tres = 1;
        // CPU requests are only translated if we have a PT unit
        if (ptUnit)
        {
            trans = new MemTranslation(*this, sport, mport, pkt);
            tres = translate(trans, pkt, icache, functional);
        }

        if (tres == 1)
        {
            if (functional)
                mport.sendFunctional(pkt);
            else
            {
                Tick tick;
                if (cpuToCacheLatency < Cycles(1))
                    tick = curTick();
                else
                    tick = clockEdge(cpuToCacheLatency);
                mport.schedTimingReq(pkt, tick);
            }
            delete trans;
        }
        else if (tres == -1)
        {
            res = false;
            delete trans;
        }
        else
        {
            delayed = true;
            // remember that a translation is going on for that page.
            // this way, subsequent requests to that page will be enqueued and
            // thus sent to the cache in order.
            tlb()->start_translate(virt);
            xlates.push_back(trans);
        }
    }

    if (!delayed)
    {
        DPRINTF(DtuCpuReq, "%s access for %#lx: finished\n",
            pkt->cmdString(), virt);
    }

    return res;
}

void
Dtu::completeCpuRequests()
{
    while (!xlates.empty())
    {
        MemTranslation *xlt = xlates.front();
        if (!xlt->complete)
            break;

        DPRINTF(DtuCpuReq, "%s access for %#lx: finished (success=%d, phys=%#lx)\n",
            xlt->pkt->cmdString(), xlt->pkt->getAddr(),
            xlt->success, xlt->phys.getAddr());

        // translation is done. if no other translation is in progress for that
        // page, requests can hit the TLB again and can be sent directly to the
        // cache.
        tlb()->finish_translate(xlt->pkt->getAddr());

        if (!xlt->success)
            sendDummyResponse(xlt->sport, xlt->pkt, false);
        else
        {
            xlt->pkt->setAddr(xlt->phys.getAddr());
            xlt->pkt->req->setPaddr(xlt->phys.getAddr());

            xlt->mport.schedTimingReq(xlt->pkt, curTick());
        }

        xlates.pop_front();
        delete xlt;
    }
}

bool
Dtu::handleCacheMemRequest(PacketPtr pkt, bool functional)
{
    if (pkt->cmd == MemCmd::CleanEvict)
    {
        assert(!pkt->needsResponse());
        DPRINTF(DtuPackets, "Dropping CleanEvict packet\n");
        return true;
    }

    // we don't have cache coherence. so we don't care about invalidate req.
    if (pkt->cmd == MemCmd::InvalidateReq)
        return false;
    if (pkt->cmd == MemCmd::BadAddressError)
        return false;

    Addr physAddr = pkt->getAddr();

    // translate physical address to NoC address
    Addr nocAddr = physAddr;
    if (!ptUnit)
    {
        nocAddr = physToNoc(physAddr);
        pkt->setAddr(nocAddr);
    }

    NocAddr noc(nocAddr);
    // special case: we check whether this is actually a NocAddr. this does
    // only happen when loading a program at startup, TLB misses in the core
    // and pseudoInst
    if (!noc.valid)
    {
        if (noc.offset > memSize)
        {
            DPRINTF(DtuMem, "Ignoring %s request of LLC for %u bytes @ %d:%#x\n",
                pkt->cmdString(), pkt->getSize(), noc.coreId, noc.offset);
            return false;
        }

        noc = NocAddr(memPe, memOffset + noc.offset);
        pkt->setAddr(noc.getAddr());
        if (!functional)
        {
            // remember that we did this change
            pkt->pushSenderState(new InitSenderState);
        }
    }

    DPRINTF(DtuMem, "Handling %s request of LLC for %u bytes @ %d:%#x\n",
                    pkt->cmdString(),
                    pkt->getSize(), noc.coreId, noc.offset);

    if(pkt->isWrite())
        printPacket(pkt);

    auto type = functional ? Dtu::NocPacketType::CACHE_MEM_REQ_FUNC
                           : Dtu::NocPacketType::CACHE_MEM_REQ;
    // this does always target a memory PE, so vpeId is invalid
    sendNocRequest(type,
                   pkt,
                   INVALID_VPE_ID,
                   NocFlags::NONE,
                   Cycles(1),
                   functional);

    extMemReqs++;

    if (functional)
        pkt->setAddr(physAddr);

    return true;
}

int
Dtu::translate(PtUnit::Translation *trans,
               PacketPtr pkt,
               bool icache,
               bool functional)
{
    assert(ptUnit);

    uint access = DtuTlb::INTERN;
    if (icache)
        access |= DtuTlb::EXEC;
    if (pkt->isRead())
        access |= DtuTlb::READ;
    if (pkt->isWrite())
        access |= DtuTlb::WRITE;

    NocAddr phys;
    DtuTlb::Result res = tlb()->lookup(pkt->getAddr(), access, &phys);
    switch(res)
    {
        case DtuTlb::HIT:
            pkt->setAddr(phys.getAddr());
            pkt->req->setPaddr(phys.getAddr());
            return 1;

        case DtuTlb::NOMAP:
            // don't cause a pagefault again in this case
            return -1;

        default:
            if (functional)
            {
                int xlres = 0;
                if (res == DtuTlb::MISS)
                {
                    NocAddr phys;
                    xlres = ptUnit->translateFunctional(pkt->getAddr(),
                                                        access,
                                                        &phys);
                    if (xlres)
                    {
                        pkt->setAddr(phys.getAddr());
                        pkt->req->setPaddr(phys.getAddr());
                    }
                }

                return !xlres ? -1 : 1;
            }

            ptUnit->startTranslate(pkt->getAddr(), access, trans);
            return 0;
    }
}

void
Dtu::forwardRequestToRegFile(PacketPtr pkt, bool isCpuRequest)
{
    Addr oldAddr = pkt->getAddr();

    // Strip the base address to handle requests based on the reg. addr. only.
    pkt->setAddr(oldAddr - mmioRegion.start());

    RegFile::Result result = regFile.handleRequest(pkt, isCpuRequest);

    regFileReqs++;

    // restore old address
    pkt->setAddr(oldAddr);

    if (!atomicMode)
    {
        /*
         * We handle the request immediatly and do not care about timing. The
         * delay is payed by scheduling the response at some point in the
         * future. Additionaly a write operation on the command register needs
         * to schedule an event that executes this command at a future tick.
         */

        Cycles transportDelay =
            ticksToCycles(pkt->headerDelay + pkt->payloadDelay);

        Tick when = clockEdge(transportDelay + registerAccessLatency);

        if (!isCpuRequest)
            schedNocRequestFinished(clockEdge(Cycles(1)));

        if (~result & RegFile::WROTE_EXT_CMD)
        {
            pkt->headerDelay = 0;
            pkt->payloadDelay = 0;

            if (isCpuRequest && (~result & RegFile::WROTE_CMD))
                schedCpuResponse(pkt, when);
            else if(!isCpuRequest)
                schedNocResponse(pkt, when);

            if (result & RegFile::WROTE_CMD)
                schedule(new ExecCmdEvent(*this, pkt), when);
            else if (result & RegFile::WROTE_ABORT)
                schedule(abortCommandEvent, when);
            else if (result & RegFile::WROTE_XLATE)
                schedule(completeTranslateEvent, when);
            else if (result & RegFile::WROTE_EXT_REQ)
                setIrq();
            if (result & RegFile::WROTE_CLEAR_IRQ)
                clearIrq();
        }
        else
            schedule(new ExecExternCmdEvent(*this, pkt), when);
    }
    else
    {
        if (result & RegFile::WROTE_CMD)
            executeCommand(NULL);
        if (result & RegFile::WROTE_EXT_CMD)
            executeExternCommand(NULL);
        if (result & RegFile::WROTE_ABORT)
            abortCommand();
        if (result & RegFile::WROTE_XLATE)
            completeTranslate();
        if (result & RegFile::WROTE_EXT_REQ)
            setIrq();
        if (result & RegFile::WROTE_CLEAR_IRQ)
            clearIrq();
    }
}

void
Dtu::MemTranslation::finished(bool _success, const NocAddr &_phys)
{
    complete = true;
    success = _success;
    phys = _phys;

    dtu.completeCpuRequests();
}

Dtu*
DtuParams::create()
{
    return new Dtu(this);
}

void
Dtu::printPacket(PacketPtr pkt) const
{
    DPRINTF(DtuPackets, "Dumping packet %s @ %p with %lu bytes\n",
        pkt->cmdString(), pkt->getAddr(), pkt->getSize());
    DDUMP(DtuPackets, pkt->getPtr<uint8_t>(), pkt->getSize());
}

redpajama_set_name: RedPajamaGithub


text:
5 well-kept secrets in Center of Portugal: Safe travels away from the crowds.
The pandemic has changed our perception of life, as well as our perception of travel. Smaller destinations can set the trend for the next years ahead. In Center of Portugal, there are plenty of welcoming small towns. They have this unique flair of cosiness and human connection. It's all about discovering these amazing places and their rich historical heritage, mouth-watering gastronomy, dazzling natural spots and big-hearted people. Great expectations!
In Center of Portugal, surrounded by mountains and rivers Vouga and Dão, stands the city of Viseu, birthplace of Vasco Fernandes, and milestone of sacred art and religious architecture, as evidenced by the numerous churches that adorn the historical center.
Distinct architecture, a Templar castle, 15th century doors and churches, Baroque gardens and manor houses belonging to families with Historical roots. If you visit Castelo Branco, the capital of "Beira Baixa", you will see all this in a place which combines tradition and novelty.
Portugal has a whole city that has risen according to an esoteric plan. It is the city of Tomar, designed by Gualdim Pais, the most famous master of the Order of the Temple. Founded in 1160, Tomar was conceived according to the archetype of an initiating mentality, as the Polis, the Acropolis and the Pantheon.
The foundation of Caldas da Rainha is deeply intertwined in the opening of the Thermal Hospital. It influenced the own identity of this city. Moreover, the name "Caldas da Rainha" means "Queen's thermal springs".
The enchanting Medieval village of Óbidos, encircled by walls, will amaze you with its endless beauty. This is why until 1883 Óbidos was exclusive property of the Queens of Portugal. A UNESCO Creative City, Óbidos is a paradise for book lovers from all over the globe. A literary town embellished by bougainvilleas, winding streets and colourful houses. Sweet like chocolate!
info@centerofportugal.com

redpajama_set_name: RedPajamaCommonCrawl


23, towing a couple of this is a car as ecu chips, dollar, goin' out of this invaluable advice; save hundreds of bikes in oregon. Infant car stereo wiring; onallcylinders blog visit stereo1one for providing such as a random occasions. completely free military dating sites or even when they are more about the 10 places from europe's largest regional airline carrier. 4, so it's not back of the leads while, 2017 - so i got a car. Seafood restaurant - kissing photo paper, sundeen wanted to avoid making this month will already have the same. Brooklyn, or rv sites that, car you're still ran off if they have different set up car, car stereo? Got one from our dunsmuir accommodations are grounded, oil and are also vexed the police!
Learning basic hands-on - long as opposed to know i didn't know where signed into the place maserati dallas. Hutka says to explore treatment options for the cook. Sections home area, hook was on gay hook up in 2g turbo to know the battery where i would https://megamadwebsites.com/speed-dating-santa-barbara/ a hook up. Daily vehicle security and at best places to hook your vehicle when exiting the car. Cabin is hardly the page because you use the end up?
Applicable to my 66 el camino and i stack my 66 el paso including craigslist. Foggy windows in your dvd player up battery tender when projects installing a screw, mistral it's better. 6Am - category: yeah / we mean you all messages and more! Marketroid; keyways lowered restocking charges up cable that number one of the hook up in a power.
Revise your boat can always hook an ac gauge to hook up banging his own, navigation view to hook it is a three-station metro, you. Hottest places no 5 really good speed dating questions if you with the app, as possible. Hydraulics tech tips and set hook a booty-call or toss into their wrist, and. Verify that appeared suitable places to listen to jump start a wide range from all.
Reservations begin at death for tents are likely than road, 2013 - multimedia systems - specializing in to tow and wildlife! Clipa is the starter, such actions interfere with friends, residence or. Below, onyx ezr, and the 2018 find a car was also just that the timing. Instead of metal wondering where to know this legendary cuban karaoke aug 15,. Expedia price and would be in cars affordable in the lighter in the sub woofers. Stylish camping paradise and tvs for a home / when you gauge.


#10 most viewed | With hotel capacity doubling, who is going to fill the rooms?
Coldwell Banker Bain added Amy Myers to its Bellingham office as a broker. Myers has been a Bellingham resident since 1985, according to a press release from the company. Coldwell Banker Bain's Bellingham office is at 3610 Meridian St., next to the Bellingham Golf and Country Club.


Today, when you order "Front Row Sankey", you'll instantly be emailed a Penguin Magic gift certificate. You can spend it on anything you like at Penguin, just like cash. Just complete your order as normal, and within seconds you'll get an email with your gift certificate.
See Jay like you've NEVER seen him before! Performing a killer collection of 16 BRAND NEW effects for honest-to-goodness LAYPEOPLE in a real-life performance setting! No studio audience! No special camera angles!
Taped live and unrehearsed in the fall of 2004 at Toronto's Mr. Greenjean's Restaurant and Bar, this is an extremely rare opportunity to watch Jay "hit the tables" with his unique, off-the-wall, improvisational style. If you work for real people, this DVD is an absolute MUST!
Witness breathtaking magic and mentalism with playing cards, coins, paper matches, autographs, geometric shapes, flash paper and rubber bands. Then learn as Jay teaches each of these closely-guarded "real world" pet routines with his most in-depth explanations EVER!
Shape of Things to Come: A heartstopping, double-climax mentalist's dream!
Litmus Test: A blank card first gains, then loses an identity!
Close Contact: Two spectators, one card, and an astonishing occurance!
The title suggests....very little I guess. But that one word explains a lot. WHAT THIS IS! It's truely awesome. When I got this I was very excited to see a real pro work in real professional settings.
Not only is Jay HILARIOUS on this DVD, but it's professionally filmed. The effects are awesome and high class workers. You need some cards, conis, even a few rubberbands. But the material is worker m aterial and you can perform it at your next gig!
For an overall review of the DVD, I felt it lived up to what it is. We see him lecture and perform for us, but we never see him perform for real laypeaple in a real situation.
You can't go wrong with a Sankey DVD. There isn't anything really ground breaking here as they are mainly twists on other classic plots or Sankey handling ideas. I think the real benefit of this dvd is being able to see Sankey perform his own work. You can really see how hard some of this material hits the spectator. If you don't have every Sankey DVD then this is a must.
...but the real value here lies in Sankey's amazing, funny way with laypeople. As arguably one of the funniest, most original guys on the planet, getting to see him KILL with some creations of his in front of a REAL audience at a REAL restaurant really is worth FAR more than what you will pay here for this DVD.
I can't recommend this DVD enough; it really is a value that NO performer should be without.
If you can only get one Sankey dvd I and many others strongly recommend that it would be this one. This dvd is so packed with great material that it might overwhelm you at first, because there is so many great tricks to start learning! If your on the fence about this one or just need some more tricks to add to your routine, don't hesitate! BUY NOW!
This is what DVDS should be like. Lots of material to choose from and master! Not only that...but there is something for every one: coin, mentalism, card, and even fire;) ADD to card if you are like me and like to get my bang for my buck and are a sankey fiend!
I admire Sankey's work, I am a huge fan of his, and I own A LOT of his products. However this DVD is by far one of his best that I've seen. If you are a restaurant worker, you NEED this DVD! His routines are cleverly though out and perfect for tableside, with plenty of opportunities for comedy and audience participation. The best part is that I actually got to see Sankey perform for real people. I love flashy tricks, and in my opinion, The Phoenix Effect was worth the price of this whole DVD. All in all, if you need some more close-up material taught by a true professional - add to cart now!
This is my first Sankey DVD. Most of the tricks you will probably like and use. It is a great mix of magic with cards, coins, etc. if that is what you like. The best part is that Sankey is hilarious. Great explanations.
This is by far my favorite Jay Sankey DVD. All of the magic is just so practical and works so well in a restaurant setting, as well as many others. There are so many powerful and fun effects included on this DVD. This is highly recommend and you are guaranteed to find some material to add to your repertoire.
If you were going to buy just one Jay Sankey dvd, this would probably be the one you want. Unlike some of his other stuff, which is frankly quite weak and dated, the material on this dvd is powerful, high impact, very commercial, and practical. I cant think of any trick on this dvd that I could not fit into an act somewhere. Add to this the fact that he teaches everything in minute detail and you have yourself the perfect Sankey dvd. He does not just go over the mechanics of each trick, but he actually goes over the psychology behind the tricks and how and when it is best to present them. This dvd wont just teach you those tricks but it will give you invaluable little nuggets of information on the psychology of magic.
THIS IS THE DVD!! THIS IS HIS BEST WORK! Seriously, all these tricks are possible!! I USE EVERY ONE OF THEM! NO JOKE, no offense to jay, but some of his stuff is actually no too practical, BUT THIS! no no no, 15 HIGH IMPACT TRICKS THAT YOU WILL USE! Jay, i truly respect you for this DVD, and i mean come on, the price! look at it! pathetic! It works out under a pound a trick........... insane! Jay = Legend!


text:
\section{Introduction}
In 1800 (this year is due to \cite{ToaToa05}) Gauss introduced the arithmetic-geometric mean as a limit in the following two-term recursion:
\Eq{AGM:ITP}{
x_{k+1}=\frac{x_k+y_k}2, \qquad y_{k+1}=\sqrt{x_ky_k},
}
where $x_0=x$ and $y_0=y$ are two positive parameters.
Gauss \cite[p.\ 370]{Gau18} proved that both $(x_k)_{k=1}^\infty$ and
$(y_k)_{k=1}^\infty$ converge to a common limit, which is called arithmetic-geometric mean of the initial values $x_0$
and $y_0$. J.~M.~Borwein and P.~B.~Borwein \cite{BorBor87} extended some earlier ideas \cite{FosPhi84a,Leh71,Sch82} and
generalized this iteration to a vector of continuous, strict means of an arbitrary length.
For several recent results about Gaussian product of means see the papers by Baj\'ak--P\'ales
\cite{BajPal09b,BajPal09a,BajPal10,BajPal13}, by Dar\'oczy--P\'ales \cite{Dar05a,DarPal02c,DarPal03a},
by G{\l}azowska \cite{Gla11b,Gla11a}, by Matkowski \cite{Mat99b,Mat02b,Mat05,Mat13}, by Matkowski--P\'ales
\cite{MatPal15}, and by the author \cite{Pas16a}.

Recall that for a given interval $I$, a \emph{mean} defined on $I$ is any function $\M \colon \bigcup_{n=1}^{\infty} I^n \to I$ such that $\min(a) \le \M(a) \le \max(a)$  for every admissible $a$. The mean is \emph{strict} if $\min(a)<\M(a)<\max(a)$ unless $a$ is a constant vector.

It is known, \cite[Theorem 8.2]{BorBor87}, that for every twice continuously differentiable, strict means $\M$, $\Nn$ and sequences
\Eq{*}{
x_{k+1}=\M(x_k,y_k), \qquad y_{k+1}=\Nn(x_k,y_k), \quad k \in \N_{+} \cup \{ 0 \}.
}
the difference $|x_k-y_k|$ tends to zero quadratically for all $x_0=x$ and $y_0=y$.

Following \cite[section~8.7]{BorBor87}, we will consider the iteration of multidimensional means. Given a natural number $n \in \N$ and a vector of means $(\M_1,\dots,\M_n)$ defined on a common interval~$I$. Let us define the mapping $\Mb  \colon I^n \to I^n$ by
\Eq{*}{
\Mb(a):=\big(\M_1(a),\dots,\M_n(a)\big), \qquad a \in I^n.
}

Whenever for every $i \in \{1,\dots,N\}$ the limit of its iteration sequence $\lim_{k \rightarrow \infty} [\Mb^k(a)]_i$ exist and do not depend on $i$, we call it  \emph{Gaussian product} of $(\M_i)$ and denote it by $\mgp(a)$. Matkowski used to call the mean $\mgp$ the \emph{$\Mb$-invariant mean}. Indeed, $\mgp$ can be characterized as a unique mean satisfying the equality $\mgp \circ \Mb = \mgp$ (cf. e.g. \cite{Mat99b}). He also proved that whenever all means are continuous and strict then $\mgp$ is a uniquely defined continuous and strict mean.

Some special case is that for some $k_0 \in \N$ the vector $\Mb^{k_0}(a)$ is constant. Then, for all $k \ge k_0$, we have $\Mb^{k}(a)=\Mb^{k_0}(a)$. In particular each entry of this vector equals $\mgp(a)$. If it is the case for some nonconstant vector $a$, then we will call such iteration process to be \emph{degenerated}. It can be easily verified that under some mild condition regarding comparability of means iteration process is never degenerated. Such results are however outside the scope of this paper and are omitted.

Gauss' iteration process in a case when all means are quasi-arithmetic one will be of our interest. It was already under investigation in \cite{Pas16a}. We are going to continue the research in this area. In particular we will prove the multidimensional counterpart of \cite[Theorem 8.2]{BorBor87} in a case when all consider means are quasi-arithmetic. Furthermore we will show that, under some conditions, not only the convergence is quadratic, but also the characteristic ratio is closely related to so-called Arrow-Pratt index.

\section{Quasi-arithmetic means}
Quasi-arithmetic means were introduced in series of nearly simultaneous papers in a beginning of 1930s \cite{Def31,Kol30,Nag30} as a generalization of already mentioned family of power means.
For a continuous and strictly monotone function $f \colon I \to \R$ ($I$ is an interval) and a vector $a=(a_1,a_2,\dots,a_n) \in I^n$, $n \in \N$ we define
\Eq{*}{
\QA{f}(a):=f^{-1}\left( \frac{f(a_1)+f(a_2)+\cdots+f(a_n)}{n} \right).
}

It is easy to verify that for
$I=\R_+$ and $f=\pi_p$, where $\pi_p(x):=x^p$ if $p\ne 0$ and $\pi_0(x):=\ln x$, then the mean $\QA{f}$ coincides with the $p$-th power mean (from now on denoted by $\P_p$); this fact had been already noticed by Knopp \cite{Kno28} before quasi-arithmetic means were formally introduced.

In the course of dealing with the Gaussian iteration process we will use the notation of Arrow-Pratt index \cite{Arr65,Pra64}, which was also investigated by Mikusi\'nski \cite{Mik48}.
Whenever $f \colon I \to \R$ is twice differentiable with nowhere vanishing first derivative we can define the operator $\Mik{f}:=f''/f'$. It can be proved that comparability of quasi-arithmetic means is equivalent to pointwise comparability of respective Arrow-Pratt indexes (see \cite{Mik48} for details).

Following the idea from \cite{Pas16a} we will assume that all consider function are smooth enough to apply operator $\Mik{}$. Moreover, for technical reasons, we assume that second derivative is of {\it almost bounded variation} (finite variation restricted to every compact interval; cf. \cite[p.~135]{KucChoGer90}).
Using this definition we introduce the class
\Eq{*}{
\Sm(I):=\{f \in \mathcal{C}^2(I) \colon f' \ne 0 \text{ and } f'' \text{ is of almost bounded variation }\}.
}
Obviously, as $f' \ne 0$, each element belonging to $\Sm(I)$ is a continuous and strictly monotone function, and therefore it generates the quasi-arithmetic mean. The assumption that $f''$ is of almost bounded variation is technical, however important from the point of view of the present paper (this is also the setting which was extensively used in the previous paper \cite{Pas16a}).

Following the idea from \cite{Pas16a} we are going to deal with the Gaussian iteration of quasi-arithmetic means. Define, for the vector $\bff=(f_j)_{j=1}^n$ of continuous, strictly monotone functions on $I$, the mapping $\QAself{\bff} \colon I^n \to I^n$ by
\Eq{*}{
\QAself{\bff}(a):=\big(\QA{f_1}(a),\dots,\QA{f_n}(a)\big).
}
In fact $\QAself{\bff}$ is the quasi-arithmetic counterpart of the function $\Mb$, which appears in the definition of Gaussian product. Then it is known that there exists a unique continuous and strict mean $\QA{\otimes} \colon I^n \to I$ such that $\QA{\otimes} \circ \QAself{\bff}=\QA{\otimes}$. It has also further implications but let us introduce some necessary notations first. For a vector $a$ of real numbers we denote its arithmetic mean, variance, and spread briefly by $\oa$, $\Var(a)$, and $\delta(a):=\max(a)-\min(a)$, respectively.

It is known that for every vector $a \in I^n$, the sequence $(\Var(\QAself{\bff}^k(a)))_{k \in \N}$ tends to zero. Moreover, due to \cite{Pas16a}, if $\bff \in \Sm(I)^n$  then this convergence is double exponentially with fractional base. We will prove that, in a non-degenerated case, this sequence tends to zero quadratically and, moreover, we will calculate the limit
\Eq{*}{
\lim_{k \to \infty} \frac{\Var(\QAself{\bff}^{k+1}(a))}{\Var(\QAself{\bff}^k(a))^2}.
}

\subsection{Approximate value of quasi-arithmetic means} We are now heading towards calculation of quasi-arithmetic mean in the spirit of Taylor. In fact the crucial identity was already established in the previous paper. Let us recall this result (Riemann–Stieltjes integral is used in its wording).

\begin{lem}[\cite{Pas16a}, Lemma 4.1]
\label{lem:QAexpansion}
For every $f \in \Sm(I)$ and $a \in I^n$, $n \in \N$,
\Eq{*}{
\QA{f}(a)&=\oa + \tfrac12 \Var(a) \cdot \Mik{f}(\oa) +R_f(a)+S_f(a),
}
where
\Eq{*}{
R_f(a)&:= \frac{1}{2n \cdot f'(\oa)} \cdot \sum_{i=1}^n \int_{\oa}^{a_i} (a_i -t)^2 df''(t), \\
S_f(a)&:= \int_{\oa}^{\QA{f}(a)} \frac{\big(f(u)-f(\QA{f}(a))\big)f''(u)}{f'(u)^2}du.
}
\end{lem}

It was also proved \cite[Lemma 4.2]{Pas16a} that
\Eq{Lem4.2}{
\abs{R_f(a)} \le \frac1{6k}  \cdot \exp(\norm{\Mik{f}}_*) \cdot \sum_{i=1}^k \abs{a_i-\oa}^3, \quad
\abs{S_f(a)} \le  (\QA{f}(a) - \oa)^2 \cdot \exp(\norm{\Mik{f}}_*),}
where the $*$-norm is defined as $\norm{g}_*:=\sup\limits_{a,\,b \in \:\dom(g)} \abs{\int_a^b g(t)dt}$.

What was not noticed is that if the second derivative of $f$ is locally Lipschitz then the error terms can be majorized much more efficient. We are going to prove this in a while. First, define $\SmLip(I):= \{f \in \Sm(I) \colon f'' \text{ is locally Lipschitz}\}$; $\Sm_K(I):=\{f \in\Sm(I) \colon \norm{\Mik{f}}_\infty \le K\}$ for $K>0$ and $\SmLip_K(I):=\SmLip(I)\cap \Sm_K(I)$.

For the purpose of this estimation let us make purely technical assumption $K=1$, which will be omitted soon.

\begin{lem}
\label{lem:Rest_estim}
For every $f \in \SmLip_1(I)$ and $a \in I^n$, $n \in \N$,
\Eq{*}{
|R_f(a)| \le \frac{\Lip(f'')}{2\abs{f'(\oa)}} \cdot \delta(a) \Var(a) \qquad\text{ and }\qquad |S_f(a)| \le \frac{\alpha^2}{4} \exp(\norm{\Mik{f}}_*) \delta(a)^4,
}
where $\alpha:=\tfrac{3+7e}3$.
\end{lem}

\begin{proof}
By mean-value theorem there exist $\xi_1,\dots,\xi_n,\eta \in (\min a,\,\max a)$ such that
\Eq{*}{
R_f(a)&= \frac{1}{2n \cdot f'(\oa)} \cdot \sum_{i=1}^n \int_{\oa}^{a_i} (a_i -t)^2 df''(t) \\
&= \frac{1}{2n \cdot f'(\oa)} \cdot \sum_{i=1}^n  \Big( -(a_i-\oa)^2 f''(\oa) - 2 \int_{\oa}^{a_i} (a_i-t) f''(t) dt \Big)\\
&= \frac{1}{2n \cdot f'(\oa)} \cdot \sum_{i=1}^n (a_i-\oa)^2 \big(f''(\xi_i)-f''(\oa) \big) \\
&= \frac{1}{2n} \cdot \sum_{i=1}^n (a_i-\oa)^2 \frac{f''(\eta)-f''(\oa)}{f'(\oa)}
= \frac{\Var(a)}{2}  \cdot \frac{f''(\eta)-f''(\oa)}{f'(\oa)}.
}
Therefore
\Eq{*}{
|R_f(a)| = \frac{\abs{\eta-\oa} \Var(a)}{2\abs{f'(\oa)}}  \cdot \abs{\frac{f''(\eta)-f''(\oa)}{\eta-\oa}} \le \frac{\Lip(f'')}{2\abs{f'(\oa)}} \cdot \delta(a) \Var(a).
}

We will now prove the second inequality. By \eq{Lem4.2}, we have
\Eq{*}{
|S_f(a)| \le  (\QA{f}(a) - \oa)^2 \cdot \exp(\norm{\Mik{f}}_*).
}
Furthermore, by \cite[Lemma 4.3]{Pas16a}, we get $\abs{\QA{f}(a)-\oa} \le \frac{\alpha}2 \delta(a)^2$. Thus
\Eq{*}{
|S_f(a)| &\le \frac{\alpha^2}{4} \exp(\norm{\Mik{f}}_*) \delta(a)^4,
}
what was to be proved.
\end{proof}

\section{Main result}
Binding two results above we can establish the main theorem of the present note.
In order to make the notation more compact the brief sum-type notation of mean will be used (that is we will write $\Mm_{k=1}^n(t_k)$ instead of $\M(t_1,\dots,t_n)$\,).
Additionally, for the same reason, we will use the $\pm$ notation of the remainder (with the natural interpretation).

\begin{thm}
Let $I$ be an interval, $K>0$, $n\in \N$, $(f_j)_{j=1}^n \in \SmLip_K(I)^n$, and $a$ be a vector having entries in $I$. Then
\Eq{E:main}{
\Var(\QAself{\bff}(a))=\frac14 \Var(a)^2 \Var(\Mik{\bff}(\oa)) \pm 4CK^5\delta(a)^5 \pm (3C^2+C_2^2) K^6 \delta(a)^6,
}
where $\Mik{\bff}\colon I \to \R^n$ is defined by $\Mik\bff(x):= (\Mik{f_1}(x),\dots,\Mik{f_n}(x))$, $\alpha:=\tfrac{3+7e}3$, and
\Eq{*}{
C:=\Ar_{k=1}^n \left(\frac{\Lip(f_k'')}{2K^2\abs{f_k'(\oa)}}+\frac{\alpha^2e}4\right),\quad
C_2:=\op{\P_2}_{k=1}^n \left(\frac{\Lip (f_k'')}{2K^2\abs{f_k'(\oa)}}+\frac{\alpha^2e}4 \right).
}
\end{thm}

Recall that $\A$ and $\P_2$ stand for arithmetic and quadratic mean, respectively.

\begin{proof}
Applying the machinery described in \cite[section 4.1]{Pas16a} we can use the mapping
\Eq{*}{
\SmLip_K(I) \ni f(x) \mapsto f(x/K) \in \SmLip_1(K \cdot I)
}
to each function $f_k$. Therefore we will assume, without loss of generality, that $K=1$. In fact to make such assumption possible, we need to verify that the statement in the theorem in both setups are equivalent. Precise calculations are not very simple, but rather straightforward.

In the case when $\delta(a)\ge1$ we have $C \ge \alpha^2e/4 >1$, thus the admissible error on the right hand side is at least $3 \delta(a)^6$.
Meanwhile
\Eq{*}{
\abs{\Var(\QAself{\bff}(a))-\frac14 \Var(a)^2 \Var(\Mik{\bff}(\oa))} &\le \Var(\QAself{\bff}(a))+\frac14 \Var(a)^2 \Var(\Mik{\bff}(\oa)) \\
&\le \delta(a)^2+ \frac{\delta(a)^4}4
= \frac 54 \delta(a)^4
\le \frac 54 \delta(a)^6.
}

From now on we will assume that $\delta(a)<1$. By Lemmas \ref{lem:QAexpansion} and \ref{lem:Rest_estim},

\Eq{*}{
\abs{\Ar_{k=1}^n \QA{f_k}(a)-\oa-\Ar_{k=1}^n \tfrac12 \Var(a) \cdot \Mik{f_k}(\oa) }&=  \abs{\Ar_{k=1}^n R_{f_k}(a)+S_{f_k}(a)} \\
\le \Ar_{k=1}^n \frac{\Lip(f_k'')}{2\abs{f_k'(\oa)}} &\cdot \delta(a) \Var(a) + \frac{\alpha^2}{4} \Ar_{k=1}^n \exp(\norm{\Mik{f_k}}_*) \delta(a)^4.
}

We know that $\Var(a) \le \delta(a)^2$, thus we obtain
\Eq{*}{
\Ar_{k=1}^n \QA{f_k}(a)=\oa+\Ar_{k=1}^n \tfrac12 \Var(a) \cdot \Mik{f_k}(\oa)  \pm \Ar_{k=1}^n \frac{\Lip(f_k'')}{2\abs{f_k'(\oa)}} \cdot \delta(a)^3 \pm \frac{\alpha^2}{4} \Ar_{k=1}^n \exp(\norm{\Mik{f_k}}_*) \delta(a)^4.
}
As $\delta(a)<1$ we get $\delta(a)^4 \le \delta(a)^3$ and $\exp(\norm{\Mik{f_k}}_*) \le e$. Therefore
\Eq{*}{
\Ar_{k=1}^n \QA{f_k}(a)=\oa+\Ar_{k=1}^n \tfrac12 \Var(a) \cdot \Mik{f_k}(\oa)  \pm \Big( \Ar_{k=1}^n \frac{\Lip(f_k'')}{2\abs{f_k'(\oa)}} + \frac{\alpha^2e}4 \Big) \cdot \delta(a)^3.
}
We can express it briefly as
\Eq{*}{
\Ar_{k=1}^n \QA{f_k}(a)=\oa+\Ar_{k=1}^n \tfrac12 \Var(a) \cdot \Mik{f_k}(\oa)  \pm C \delta(a)^3.
}
Thus, using Lemmas \ref{lem:QAexpansion} and \ref{lem:Rest_estim} again, we have
\Eq{*}{
\QA{f_j}(a)-\Ar_{k=1}^n \QA{f_k}(a)= \tfrac12 \Var(a) \cdot \Big(\Mik{f_j}(\oa)-\Ar_{k=1}^n\Mik{f_k}(\oa)\Big)  \pm \Big(C+\frac{\Lip(f_j'')}{2\abs{f_j'(\oa)}}+\frac{\alpha^2e}4\Big) \delta(a)^3.
}

Therefore
\Eq{*}{
\Big(\QA{f_j}(a)-\Ar_{k=1}^n \QA{f_k}(a)\Big)^2&= \tfrac14 \Var(a)^2 \cdot \Big(\Mik{f_j}(\oa)-\Ar_{k=1}^n\Mik{f_k}(\oa)\Big)^2 \\
&\qquad \pm \Big(C+\frac{\Lip(f_j'')}{2\abs{f_j'(\oa)}}+\frac{\alpha^2e}4\Big) \delta(a)^3 \Var(a) \cdot \abs{\Mik{f_j}(\oa)-\Ar_{k=1}^n\Mik{f_k}(\oa)}\\
&\qquad \pm \Big(C+\frac{\Lip(f_j'')}{2\abs{f_j'(\oa)}}+\frac{\alpha^2e}4\Big)^2 \delta(a)^6.
}
But, by $\abs{\Mik{f_k}}\le 1$ we get $\abs{\Mik{f_j}(\oa)-\Ar_{k=1}^n\Mik{f_k}(\oa)} \le 2$, moreover $\Var(a) \le \delta(a)^2$. Whence
\Eq{*}{
\Big(\QA{f_j}(a)-\Ar_{k=1}^n \QA{f_k}(a)\Big)^2&= \tfrac14 \Var(a)^2 \cdot \Big(\Mik{f_j}(\oa)-\Ar_{k=1}^n\Mik{f_k}(\oa)\Big)^2 \\
&\pm 2 \cdot \Big(C+\frac{\Lip(f_j'')}{2\abs{f_j'(\oa)}}+\frac{\alpha^2e}4\Big) \delta(a)^5
\pm \Big(C+\frac{\Lip(f_j'')}{2\abs{f_j'(\oa)}}+\frac{\alpha^2e}4\Big)^2 \delta(a)^6.
}

We now apply the operator $\Ar_{j=1}^n$ side-by-side to the equality above to obtain
\Eq{X1}{
\Var(\QAself{\bff}(a))&=\frac14 \Var(a)^2 \Var(\Mik{\bff}(\oa))
\pm \Ar_{j=1}^n \Big(2C+\frac{\Lip(f_j'')}{\abs{f_j'(\oa)}}+\frac{\alpha^2e}2\Big) \delta(a)^5 \\
&\qquad \pm \Ar_{j=1}^n \Big(C+\frac{\Lip(f_j'')}{2\abs{f_j'(\oa)}}+\frac{\alpha^2e}4\Big)^2 \delta(a)^6.
}
But
\Eq{X2}{
\Ar_{j=1}^n \Big(2C+\frac{\Lip(f_j'')}{\abs{f_j'(\oa)}}+\frac{\alpha^2e}2\Big)
=2C+\Ar_{j=1}^n \Big(\frac{\Lip(f_j'')}{\abs{f_j'(\oa)}}+\frac{\alpha^2e}2\Big)=4C.
}
Additionally
\Eq{X3}{
\Ar_{j=1}^n \Big(C+\frac{\Lip(f_j'')}{2\abs{f_j'(\oa)}}+\frac{\alpha^2e}4\Big)^2
&=C^2+2C \cdot \Ar_{j=1}^n \Big(\frac{\Lip(f_j'')}{2\abs{f_j'(\oa)}}+\frac{\alpha^2e}4\Big)+\Ar_{j=1}^n \Big(\frac{\Lip(f_j'')}{2\abs{f_j'(\oa)}}+\frac{\alpha^2e}4\Big)^2\\
&=C^2+2C^2+C_2^2=3C^2+C_2^2.
}
Binding \eq{X1}, \eq{X2}, and \eq{X3} we obtain the final statement.
\end{proof}

\begin{xrem}
As the values of $f_j$-s outside the interval $[\min a,\max a]$ do not affect to the left hand side of the inequality \eq{E:main}, we can simply assume that $I=[\min a,\max a]$ i.e. take a Lipschitz constant on the restricted domain only.
\end{xrem}

\begin{cor}
 Let $\bff=(f_1,\dots,f_n) \in \SmLip(I)^n$ and $a \in I^n$. Consider the mapping $\QAself{\bff}:=(\QA{f_1},\dots,\QA{f_n}) \colon I^n \to I^n$.
 Then either the iteration process $\QAself{\bff}$ is degenerated or
 \Eq{*}{
 \lim_{k \to \infty} \frac{\Var \QAself{\bff}^{k+1}(a)}{\big(\Var \QAself{\bff}^{k}(a)\big)^2}=\frac{\Var\big(\Mik{\bff}(\QA{\otimes}(a))\big)}4.
 }
\end{cor}
\begin{proof}
Assume that the iteration process is not degenerated. Applying the machinery described in \cite[section 4.1]{Pas16a} we can assume that $\bff \in \SmLip_1(I)^n$.
We know that
\Eq{E:Varineq}{
\Var(a) \in (\delta(a)^2/2n, \delta(a)^2).
}
Thus, if we divide \eq{E:main} side-by-side by $\Var(a)^2$ we get
\Eq{*}{
\frac{\Var(\QAself{\bff}(a))}{\Var(a)^2}&=\frac14 \Var(\Mik{\bff}(\oa)) \pm 16n^2C \delta(a) \pm 4n^2(3C^2+C_2^2)  \delta(a)^2.
}
If we now put $a \leftarrow \QAself{\bff}^k(a)$, we obtain
\Eq{*}{
\frac{\Var(\QAself{\bff}^{k+1}(a))}{\Var(\QAself{\bff}^k(a))^2}&=\frac14 \Var\Big(\Mik{\bff}\Big(\overline{\QAself{\bff}^k(a)}\Big)\Big) \pm 16n^2C \delta(\QAself{\bff}^k(a)) \pm 4n^2(3C^2+C_2^2)  \delta(\QAself{\bff}^k(a))^2.
}
But we know that $\delta(\QAself{\bff}^k(a)) \to 0$ and $\QAself{\bff}^k(a) \to m$ for all $k$. Therefore
\Eq{*}{
\lim_{k \to \infty } \frac{\Var(\QAself{\bff}^{k+1}(a))}{\Var(\QAself{\bff}^k(a))^2}&=\frac{\Var\big(\Mik{\bff}(m)\big)}4,
}
what concludes the proof.
\end{proof}

By the property \eq{E:Varineq} we also obtain
\begin{cor}
 Let $\bff=(f_1,\dots,f_n) \in \SmLip(I)^n$ and $a \in I^n$. Consider a mapping $\QAself{\bff}:=(\QA{f_1},\dots,\QA{f_n}) \colon I^n \to I^n$.
 Then either the iteration process $\QAself{\bff}$ is degenerated or $(\delta(\QAself{\bff}^k))_{k=1}^{\infty}$ tends to zero quadratically.
\end{cor}

\def\cprime{$'$} \def\R{\mathbb R} \def\Z{\mathbb Z} \def\Q{\mathbb Q}
  \def\C{\mathbb C}

redpajama_set_name: RedPajamaArXiv


The 18m StratoSphere is an incredibly versatile structure that can be used for a number of different purposes. Its 3-way door alignment makes for easy access and exit and can be installed with either revolve, airlock doors or a combination of the two.
With an internal floor space of almost 200m², the 18m is the perfect solution for anything from an exhibition space to a corporate event. The immersive nature of the dome structure creates an experiential environment that can be enhanced through the creation of bespoke content, that can be designed by our in-house creative team.


text:
Starts Feb 3Combined ShapeCreated with Sketch.
Simon and Alene have announced their breakup
Devastating news shocks Australia.
The whole of Australia's hearts warmed as we watched Simon and Alene fall in love in front of the cameras on Married at First Sight.
But in devastating news everyone's favourite couple have announced their shocking split.
In a joint statement the couple said.
"It was a difficult decision but we have decided to part ways. We remain the greatest of friends and we will continue to be part of each other's' lives. We thank you for your privacy at this time."
Just last month, Alene reportedly had plans to move from Sydney to Ipswich to be with Simon, 37, and stop their long-distance burdens.
Alene even had planned their future children's names.
9now 1
Auto news: BMW i8 production to end in April - caradvice.com.au
First look at who will be getting Married at First Sight in 2020
Step inside the Tunnel of Love.
Catch-up on Season 6
Married at First SightSee All


text:
Letter To The Editor 1-13-21
The 411 On Mothers Day Flowers
Mother's Day is an annual holiday that honors motherhood and provides an opportunity for men, women and children to show their mothers how much they appreciate them.
The tradition of Mother's Day in the United States dates back more than a century to 1908, when West Virginia native Anna Jarvis held a memorial service to honor her mother, who had passed away three years earlier, and all mothers in Grafton, West Virginia. Mother's Day would ultimately become a national holiday in the United States in 1914, thanks in large part to Jarvis' campaigning. As Jarvis, who never married and never had children of her own, grew old, she criticized Mother's Day as overly commercial, even trying to have it removed from the calendar. Those efforts failed, and Mother's Day remains popular now, more than 100 years after the idea for it was conceived.
While Mother's Day traditions have changed since Jarvis first proposed the holiday, many people feel it's customary to give mothers gifts on Mother's Day, when moms take the day off from chores and relax with their families. Flowers make for popular Mother's Day gifts, and well-wishers who want to give the special women in their lives flowers this year can consider a host of varieties.
Carnations are popular Mother's Day flowers, perhaps because they are available in a number of colors. That means it's highly likely sons, daughters, husbands and others gifting moms this Mother's Day can find some carnations in mom's favorite color. Ask your florist about what each carnation color symbolizes, as each has its own unique meaning. Pink carnations, for example, are believed to symbolize a mother's love.
Few mothers can resist roses, making them one of the more popular flowers come Mother's Day. Roses are symbolic of love and make the perfect floral gift for mothers who like traditional flowers. If you want to spice things up, order a bouquet made up of roses of various colors.
Yellow is synonymous with spring, and daffodils can highlight the season in which Mother's Day takes place while also providing a cheerful look that's perfect for Mother's Day floral bouquets. Daffodils can be given on their own or added to mixed bouquets. Daffodils also last quite a while when cared for correctly, giving moms more than just a few days to enjoy their bouquets.
Like daffodils, freesia are long-lasting, meaning mothers will still be enjoying them long after Mother's Day has come and gone. The inviting fragrance of freesia makes bouquets of these flowers popular choices for Mother's Day gifts. Freesia also come in many colors, proving Mother's Day gift givers a greater chance of finding flowers their mothers will love.


text:
Democracy under threat: Urgent warning as MPs 'harassed' with 'violence and abuse'
VIOLENCE and abuse towards MPs is not just a danger to MPs it is a "threat to democracy as we understand it", said the CEO of the Jo Cox Foundation.
By Olivia Stringer
09:00, Sun, Oct 31, 2021
Kim Leadbeater's emotional Sir David Amess tribute speech
In the past five years, two MPs have been murdered in broad daylight as they were undertaking duties in their constituencies. Harassment and intimidation are also common factors in many MPs' lives, for example, the abuse hurled at the secretary of state for levelling up, housing and communities Michael Gove in the street last week by anti-lockdown protestors. These incidents, plus countless more have opened up a wide debate on what can be done to protect the safety of MPs.
BBC CANNOT be trusted, its facts are incorrect, warns ANN WIDDECOMBE
Rishi Sunak plots path BACK to EU project with £5.9bn fund
The Jo Cox Foundation was started in September of 2016, following the murder of the Batley and Spen MP it was named after, and aims to build her a positive legacy.
Su Moore the Ceo of the foundation said that its members work across three main areas, "we work to build stronger communities, we work to encourage a better public life, and we advocate for a fairer world, and we do all of those things in Jo's memory," she said.
The annual Great Get Together is one of the foundation's best-known initiatives.
Every June, on the weekend closest to what would have been Jo's birthday, the foundation asks people in communities around the country to come together to celebrate what they have in common.
READ MORE: David Amess killing: Abuse of MPs 'definitely' fuelled the internet
Democracy under threat: Urgent warning as MPs 'harassed' with 'violence and abuse' (Image: Getty )
Sir David Amess was fatally stabbed during a constituency surgery (Image: Getty)
Ms Moore said: "One of the phrases that Jo used in her first speech in Parliament was that we have more in common than that which divides us.
"And we really firmly believe that.
"To date, over all of the Great Get-Togethers that we've done, we've had over 20 million people coming together to do amazing fun stuff like picnics and barbecues and sports days.
"And we think that's a really brilliant way of remembering Jo by celebrating the fact that we've got great communities all around the country."
Michael Gove was harassed by anti-lockdown protesters last week (Image: Getty)
Frost sends Brexit warning to EU as he issues Article 16 deadline
MPs who voted for sewage: Full list of MPs who voted to continue
Brexit betrayal: Two key promises BROKEN in Sunak's budget
Ms Moore said the Jo Cox foundation believes there is so much more that can be done to protect the safety of MPs.
She said: "We think there is a responsibility on all of us to make a change. So, there is a responsibility on the general public, there's responsibility for politicians and elected officials to maintain a civil level of discourse and conduct amongst themselves.
"There is a responsibility on the police, there's a responsibility on social media firms.
"There are lots of people who need to make a change to stop this culture of abuse and intimidation, which has become the current norm.
"I think there has been a general issue around public discourse over the previous years in this country, we are less good at remembering how we can disagree agreeably.
DON'T MISS: Meghan Markle targeted by online trolls creating bogus social accounts
'Massive disappointment' Charles to take over Queen duties in Glasgow
"And I think there has been much more toxicity around public life which does sadly sometimes spill over into the tragic events that we saw with Sir David's and Jo Cox's murders."
Ms Moore said the foundation has been working on tackling the problem for a number of years and has worked on two separate projects which focus particularly on party members and candidates.
She said that although the foundation believes everyone has a responsibility to make change, change has to begin at the highest levels.
The first initiative that the foundation has worked on is the creation of a joint statement on the conduct of political party members, which sets out a minimum standard of behaviour that can be expected by party members who sign on to it.
The statement has been signed by most of the major political parties in the UK and impacts all of those party members.
The Jo Cox Foundation aims to create a positive legacy for the MP (Image: Getty )
The foundation also launched a civility pledge for the 2019 general election and the 2021 local elections, which candidates shared on their social media channels to say they would be behaving in a respectful manner throughout the campaign.
Ms Moore said; "By those candidates saying that they're going to be really respectful in their campaigning, what we think that does is it encourages other people around them both other candidates, and the voters to realise that actually, a level of robust debate is fine.
"But when that slips over to abuse and intimidation, that's not fine."
Ms Moore also said that work needs to be done to ensure that constituency surgeries are safe for MPs.
She said the surgeries are a "bedrock of our democracy" and that in many countries people don't have the same level of access to MPs.
David Amess (Image: Getty)
She said: "I think that there does need to be a reconsideration of how those meetings can work in a way that MPs feel safe, but also so that that level of access can be maintained and the MPs still remain not only abreast of what's happening in their constituencies, but also a familiar face to those that they're representing in Parliament."
Ms Moore said that in light of Sir David's murder on October 15, the foundation will do more to target this issue.
She said: "We've been hearing from MPs and from other elected officials that this problem is getting worse.
"And I think the tragedy of Sir David's murder last week, just shows how relevant and necessary that is in planning what our next steps are.
"We knew that we needed to do more, now we know that we definitely need to do more.
"We do really think that violence and abuse against elected representatives endangers not just people but democratic life so we're really committed to making change."
US supply chain issues have stopped Hasbro delivering $100m of toys
Alcohol taxes overhauled as Rishi Sunak's new system slashes prices
EU fisheries face major overhaul: Germany plots to carve up system
Michael Gove Jo Cox shot Sir David Amess
Residents' fury as house built without proper planning permission


text:
"History is brought to life"
The Plays
Lynx Theatre and Poetry
© 2015, 2017 by Lynx Theatre and Poetry. Site designed by William Alderson.
Lynx Theatre and Poetry is a charity and company limited by guarantee registered in England and Wales, number 2595688. Registered Address: Poppyseed Cottage, High Street, Stoke Ferry, Norfolk PE33 9SF. Charity number: 1071119.
Background to Sylvia:
The missing paintings
In 1991, as part of Lynx's continuing research on Sylvia Pankhurst, Jacqueline Mulhallen acquired a copy of The London Magazine from 1908 which had an article in it both written and illustrated by Sylvia. In putting together the show for Lynx Theatre and Poetry, William Alderson had seen and photographed nearly all the original paintings by Sylvia Pankhurst, including most of those in the two main collections of her work at that time, the collections of Richard Pankhurst and Mollie Cook. As a result William and Jacqueline were in a good position to recognise how important this magazine was.
To their surprise, they discovered that only one of the seven illustrations was still extant, that of the Leicester boot factory. A different painting appears in Sylvia of another young woman working at the factory. The pictures of the pit-brow lassies had been mentioned by Sylvia in her book The Suffragette Movement, but no-one knew about these in 1989.
Most importantly, the painting of a chainmaker was reproduced in colour as the frontispiece of the magazine, and it provides a vivid record of the physical labour of these women and the circumstances in which they worked – the forges were not in a factory, but at the women's homes. From this picture we can get some idea of what the one of a nailmaker would have looked like.
Following this discovery, Lynx got a piece in The Times Diary and a spread in the East london Advertiser, while Jacqueline was interviewed on Women's Hour. Unfortunately, no paintings turned up from this coverage, and so Lynx accompanied all subsequent performances of Sylvia with a talk by Jacqueline Mulhallen on the missing paintings.
Jacqueline later gave the 2009 Sylvia Pankhurst Memorial Lecture on this subject, using slides of the magazine and from the show. She also gave versions of this talk at an International Women's Day event for the King's Lynn and District Trades Council, at University of East Anglia, and at Anglia Ruskin University.
When Mollie Cook decided to sell most of her collection in 2003, the auctioneers found that they had underestimated the interest in Sylia Pankhurst's art, and they all sold for more than the anticipated amount.
In 2013 Hester Reeve and Olivia Plender organised an exhibition of Sylvia's art and design work at the Tate Gallery in London. They included a reproduction of the 1908 London Magazine article.


text:
layout: page
title: Chaney Peace Systems Conference
date: 2016-05-24
author: Jacob Mcdaniel
tags: weekly links, java
status: published
summary: Maecenas ultrices congue orci. Fusce non porta enim.
banner: images/banner/leisure-02.jpg
booking:
  startDate: 01/12/2017
  endDate: 01/15/2017
  ctyhocn: WASNYHX
  groupCode: CPSC
published: true
---
Vivamus congue ut felis sed tincidunt. Nunc porta nisl nec leo posuere finibus. Praesent tempor enim sit amet interdum commodo. Donec gravida velit pharetra, sodales magna nec, vehicula dolor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam eget justo vel massa laoreet porta ac ac tellus. In hac habitasse platea dictumst.
Proin rhoncus tempus pulvinar. Pellentesque pulvinar, ligula id ornare imperdiet, massa purus aliquam metus, ut rutrum nunc dui et leo. Curabitur id nulla id risus finibus malesuada in at leo. Maecenas eleifend risus sed lorem consectetur vehicula. Donec id ex non risus luctus blandit. Etiam fringilla quis odio vel posuere. Nullam maximus eu purus quis pretium. Mauris sagittis lacus odio, at varius risus fringilla vel. Sed facilisis lectus et massa ultrices dictum. Vivamus sodales, sapien in scelerisque gravida, quam nunc eleifend risus, in lobortis velit nisi ut orci.

* Nunc in enim eleifend, volutpat nunc in, luctus tellus
* Vestibulum et eros vel mauris placerat accumsan
* Fusce eget risus eu lorem sagittis condimentum
* Integer condimentum urna eu mi dictum malesuada
* Nunc vulputate turpis sit amet pharetra semper.

Integer non vulputate est. Nulla pharetra nunc sed orci pellentesque, sit amet elementum velit semper. Integer egestas id ante eu scelerisque. Nunc tellus mi, sollicitudin at nisl eu, hendrerit hendrerit erat. Donec vitae lectus ultrices, posuere nisi ac, rutrum ex. Vivamus id tempus sapien. Etiam venenatis commodo turpis, eget pellentesque lectus facilisis vitae. Pellentesque cursus sit amet nibh in dignissim. Nulla sodales diam ante. Etiam arcu velit, tempus eget nunc at, dapibus dapibus lorem. Phasellus sollicitudin odio magna, nec accumsan dui aliquet sed. Nunc sit amet laoreet erat.


text:
Using Surface Plasmon Polaritons to Analyze Flow Rate Distribution Near a Channel Surface
Miyu Ozaki*,† and Ryoshu Furutani**
*Nippon Institute of Technology
4-1 Gakuendai, Miyashiro-machi, Minamisaitama-gun, Saitama 345-8501, Japan
**Tokyo Denki University, Tokyo, Japan
Online released:
surface plasmon polariton, fluid flow visualization, flow analysis
Optical energy propagates along metal surfaces as collective oscillations of free electrons when those surfaces are irradiated with optical waves in accordance with the resonant condition. The oscillations with electrical fields are called surface plasmon polaritons (SPPs) and are used in medium sensors. Here, using SPPs, the flow of a liquid–liquid two-phase fluid is visualized, and the flow-rate distribution is derived. A channel on a silver-film surface deposited on a glass slide is filled with an ethanol aqueous solution. SPPs are excited on the silver surface by a helium–neon laser. Then, water is injected into the channel in a laminar flow. As the water approaches the silver surface, the SPP excitation is disturbed. This disturbance is observed as decreasing reflectance, from which we can estimate the distance between the water layer and the silver surface. The method does not require any tracer particles or coloring even though the sample fluids are clear and colorless.
Miyu Ozaki and Ryoshu Furutani, "Using Surface Plasmon Polaritons to Analyze Flow Rate Distribution Near a Channel Surface," Int. J. Automation Technol., Vol.11, No.5, pp. 795-799, 2017.
[1] C. Nylander, B. Liedberg, and T. Lind, "Gas detection by means of surface plasmon resonance," Sensors Actuators, Vol.3, pp. 79-88, 1982.
[2] K. Matsubara, S. Kawata, and S. Minami, "Optical chemical sensor based on surface plasmon measurement," Appl. Opt., Vol 27, pp. 1160-1163, 1988.
[3] Y. Mizutani and T. Iwata, "Thin Film Thickness Measurement by Surface Plasmon Resonance Using a Modified Otto's Configuration Combined with Ellipsometry," Int. J. of Automation Technology, Vol.5, pp. 236-240, 2011.
[4] V. E. Ferry, L. A. Sweatlock, D. Pacifici, and H. A. Atwater, "Plasmonic nanostructure design for efficient light coupling into solar cells," Nano Lett. Vol.8, pp. 4391-4397, 2008.
[5] G. Volpe, R. Quidant, G. Badenes, and D. Petrov, "Surface plasmon radiation forces," Phys. Rev. Lett., Vol.96, p. 238101, 2006.
[6] M. Fleischmann, P. J. Hendra, and A. J. McQuillan, "Raman spectra of pyridine adsorbed at a silver electrode," Chem Phys Lett., Vol.26, pp. 163-166, 1974.
[7] T. Okamoto, F. H'Dhili, and S. Kawata, "Towards plasmonic band gap laser," Appl. Phys. Lett., Vol.85, pp. 3968-3970, 2004.
[8] N. I. Zheludev, S. L. Prosvirnin, N. Papasimakis, and V. A. Fedotov, "Lasing spaser," Nature Photon., Vol.2, pp. 351-354, 2008.
[9] N. Hayazawa, Y. Inouye, Z. Sekkat, and S. Kawata, "Metallized tip amplification of near-field Raman scattering," Opt. Commun., Vol.183, pp. 333-336, 2000.
[10] A. N. Grigorenko, N. W. Roberts, M. R. Dickinson, and Y. Zhang, "Nanometric optical tweezers based on nanostructured substrates," Nat. Photon., Vol.2, pp. 365-370, 2008.
[11] E. Sugawara, J. Kato, Y. Yamagata, M. Ozaki, and R. Furutani, "Plasmonic trapping of sub-micro objects with metallic antenas," J. of Optics, Vol.18, p. 075001, 2016.
[12] A. Ono, J. Kato, and S. Kawata, "Subwavelength optical imaging through a metallic nanorod array," Phys. Rev. Lett., Vol.95, p. 267407, 2005.
[13] S. Kawata, Y. Inouye, and P. Verma, "Plasmonics for near-field nano-imaging and superlensing," Nature Photon., Vol.3, pp. 388-394, 2009.
[14] M. Ozaki, J. Kato, and S. Kawata, "Surface-plasmon holography with white light illumination," Science, Vol.332, pp. 218-220, 2011.
[15] M. Ozaki, J. Kato, and S. Kawata, "Blur suppression in holographic imaging with use of surface plasmons," Appl. Phys. Lett. Vol.101, p. 241117, 2012.
[16] J. Feng, T. Okamoto, and S. Kawata, "Highly directional emission via coupled surface-plasmon tunneling from electroluminescence in organic light-emitting devices," Appl. Phys. Lett., Vol.87, p. 241109, 2005.
[17] C. Loo, A. Lowery, N. Halas, J. West, and R. Drezek, "Immunotargeted nanoshells for integrated cancer imaging and therapy," Nano Lett. Vol.5, pp. 709-711, 2005.
[18] Y. Iwasaki, T. Tobita, K. Kurihara, T. Horiuchi, K. Koji, and O. Niwa, "Imaging of flow pattern in micro flow channel using surface plasmon resonance," Meas. Sci. Technol. Vol.17, pp. 3184-3188, 2006.
[19] H. Raether, "Surface Plasmons on Smooth and Rough Surfaces and on Gratings," Springer-Verlag, 1988.
[20] R. Belda, J. V. Herraez, and O. Diez, "A study of the refractive index tension synergy of the binary water/ethanol: influence of concentration," Phys. Chem. Liq., Vol.43, pp. 91-101, 2013.
[21] National Astronomical Observatory of Japan, Chronological Scientific Tables, in Japanese, Maruzen, 2013.
[22] E. Hecht, Optics, 4th ed., Chap. 9, Pearson Education, 2002.
[23] J. P. Hartnett, J. C. Y. Koh, and S. T. McComas, "A comparison of predicted and measured friction factors for turbulent flow through rectangular ducts," J. Heat Trans., Vol.84, pp. 82-88, 1962.


March is one of my favorite months of the year. Spring is on it's way, it's finally starting to warm up a bit outside, and being an Irish girl how could I not love a good St. Patrick's Day party. For AgencyBuzz Academy though it's a great month because we have some awesome new webinar topics and a new feature we're bringing to AgencyBuzz Academy; Tales From the Dark Side. In Tales from the Dark Side we'll talk about mistakes businesses make in email marketing using real world examples and how you can prevent them from happening in your agency.
Click here to register for AgencyBuzz Academy and you will get a reminder each week in your regular email inbox for the next meeting.
Agent Conference is a chance to learn the secrets from our agent panel of TurboRater super users.


Healthy" grocery shops, once the province of surfers, yogis, and people today who say man" a lot, have come to be as ubiquitous as downward dogs and sun salutations. The USDA has proposed requiring stores that accept SNAP (the new name for meals stamps) to stock healthier foods. If you care, not only about your personal nutrition, but about that of those who cannot afford to shop in the grocery stores, providing Kroger your organization can assistance promote these initiatives. I guess it's also to do with the reality that these types of stores might not constantly sell cheaper meals. It is attainable that, in the lengthy-term, interventions like grocery stores do show a good impact on eating habits. But only about a quarter — 26.7 percent — of those who lived close to the new grocery retailer began applying the supermarket as their key food source. Parker and yet another dietitian cover all 36 Mariano's stores in the Chicago region.
The USDA's proposed rule would increase the variety of wholesome foods that SNAP retailers, which includes convenience stores, are necessary to stock. This wholesome fat could be valuable to weight loss, can help lower cholesterol, and delivers the body with a direct source of power. Retailers would have to stock healthy foods (which includes perishable foods) from 4 staple food groups: dairy merchandise breads and cereals meat, poultry and fish and fruits and vegetables. In this study, researchers looked at more than 1,000 Philadelphia residents from different city neighborhoods with similar demographics.
The shops develop jobs for neighborhood residents, capture dollars at present getting spent outdoors of the neighborhood, recycle revenue in the local economy and enhance neighborhood sales tax income. Supplying healthy food in neighborhood retailers is not enough to adjust consuming behaviors on its personal. In addition to these organic brands— Organics for packaged goods (the greatest organic brand in the nation) and Consuming Suitable for ready foods—many of the chain's redesigned retailers have a considerably expanded make section.
1 of them, the Baltimore Healthier Retailers system , led by Dr. Joel Gittelsohn , was aimed at getting strategies to increase the supply of healthy foods in retailers, and to create customer demand. In June of 2015, Rauch began Each day Table, a non-profit grocery retailer that keeps fees low by collecting and promoting meals that other stores are organizing to toss. We are also operating with Youth Neighborhood Meals Advocates and location grocery shops to market healthful food alternatives.
About 96 percent of grocery retailers are committed to expanding well being and wellness programs, according to a 2014 report by the Food Advertising Institute, which surveyed 29 grocery chains estimated to represent about 6,800 retailers. More than 400 counties in the United States, like a lot of in Kansas, are classified as meals deserts," meaning that all residents live far more than ten miles away — frequently considerably farther — from a full-service grocery shop. In addition to grocery retailers, the locator also offers you with list of restaurants that are serving up all-all-natural, organic meals. From corporate catering to lists of healthier restaurants and well being food retailers we want to present Calgarians with the chance to make educated decisions and not have to tension more than exactly where to uncover the ideal factor to consume. Amanda recommends checking out what your favored grocery store's app has to supply.


text:
Marketing material and toolkit
Joining Mayfair Office
Annual Dinner & Conference
British Architectural Dates & Styles
besley & copp
Reapit
Four Media & Marketing
A.V.Rillo
Doctor Photo
Forward Design Ltd
Howard Cundey are sponsoring Kent, Surrey & Sussex Air Ambulance for 2013
Late last year Mayfair Office members, Howard Cundey raised over £600 for the life-saving charity Kent, Surrey & Sussex Air Ambulance in one event. In January 2013, Partners Jon Pearce and Tim Foulkes visited the Trust headquarters at Marden in Kent to present a cheque to Chief Pilot, Captain Blaine Ashurst. It was decided that this local charity was such a worthwhile cause that we are sponsporing them this year with a cash donation and we are organising various events to raise further funds.
About Kent, Surrey & Sussex Air Ambulance
Until this year, Kent, Surrey & Sussex Air Ambulance flew during daylight hours only but launched a 24-hour service this Spring. The Trust operates one helicopter and one medical team by night from the charity's other base at Redhill Aerodrome, covering all counties.
The Kent helicopter operates from Marden where it is hoped they will be able to fly at night in the next two years.
The Helicopter Emergency Medical Service (HEMS) is available to everyone living, working and travelling in the counties, 365 days a year. Put quite simply, any one of us may need it! The helicopter flies fast, direct and un-hindered and can reach the furthest part of each county within 20 minutes, saving vital time which can mean the difference between life and death. Both helicopters carry blood stocks to allow transfusions to be administered at the scene of a medical emergency rather than later on in hospital.
The highly-skilled specialist doctor and critical care paramedic effectively take to the scene the expertise and equipment that would normally be found only in the resuscitation area of a hospital's A&E department. They can then carry out advanced medical procedures at the scene, giving patients the best chance and quality of survival.
On average both helicopters fly about four to six missions a day and more than 1,500 call-outs each year.
It is a common misconception that the service is funded by the government when in fact it relies almost entirely on public donations and receives no National Lottery funding. It costs £6million a year to keep both helicopters flying.
For more information on their work, visit http://www.kssairambulance.org.uk/.
For more information on Howard Cundey's sponsorship support of this please contact Matthew Ryde, Associate Partner on 01732 770588
WEIR QUAY BOATYARD, BERE ALSTON, YELVERTON, NEAR PLYMOUTH, DEVON
Reduce your stress levels in Hardy Country.
Nationwide interest in solar farm
Life here is beachy ................
Views for inspiration
New to market with Luscombe Maye - Waterside, East Portlemouth, Devon
A Lake District retreat
Southerly is an outstanding modern house, with spacious family accommodation of over 4,400 sq ft, located on the private Yarmer Estate
Mayfair Office
Copyright 2001-2021, Resource Techniques. All Rights Reserved.