text:
Scolyminae Less., 1832 è una sottotribù di piante angiosperme dicotiledoni della famiglia delle Asteraceae.

Etimologia
Il nome di questa sottotribù deriva dal suo genere più importante (Scolymus) che a sua volta è stato ricavato dalla parola greca "skolymus" che indica una specie di cardo o carciofo. Il riferimento non è molto chiaro in quanto la somiglianza di questi fiori con il carciofo è molto tenue. Questo nome è stato usato anticamente da Plinio per la specie Scolymus hispanicus.

Il nome scientifico di questo gruppo è stato definito per la prima volta dal botanico tedesco Christian Friedrich Lessing (Syców, 1809 – Krasnojarsk, 1862) nella pubblicazione "Synopsis generum Compositarum, earumque dispositionis novae tentamen, monographiis multarum Capensium interjectis : 126" del 1832.

Descrizione

Habirus. Questa sottotribù è caratterizzata da specie sia annuali o che perenni; l'habitus si presenta molto spinoso con steli alati. In queste piante sono presenti sia condotti resiniferi che canali laticiferi. In particolare i generi Gundelia e Scolymus sono laticiferi con foglie spinose e con capolini sessili; inoltre in Gundelia i fiori sono solamente tubulosi.

Fusto. I fusti sono eretti, glabri o pelosi. Sono ramosi nella parte alta e in genere sono fogliosi. I rami possono essere alati.

Foglie. Le foglie possono essere sia basali che cauline. Le lamine sono intere-lineari o lanceolate di tipo pennatosette con lobi grossolani e disposte lungo il fusto in modo alterno. Queste foglie in genere sono spinose.

Infiorescenza. Le infiorescenze sono composte da capolini che possono essere sia singoli che multipli. I capolini sono formati da un involucro composto da brattee (o squame) all'interno delle quali un ricettacolo fa da base ai fiori ligulati (o in alcuni casi tubulosi). Gli involucri a forma campanulata o urceolata, sono formati da due serie di squame. Il ricettacolo è provvisto di pagliette con ampie ali che racchiudono in alcuni casi gli acheni.

Fiori. I fiori sono tetra-ciclici (ossia sono presenti 4 verticilli: calice – corolla – androceo – gineceo) e pentameri (ogni verticillo ha in genere 5 elementi). I fiori sono inoltre ermafroditi e zigomorfi o actinomorfi.

 Formula fiorale:
 */x K , [C (5), A (5)], G 2 (infero), achenio

 Calice: i sepali del calice sono ridotti ad una coroncina di squame.

 Corolla: il colore delle corolle è prevalentemente giallo o blu in Catananche, o altrimenti bianco o rosa.

 Androceo: gli stami sono 5 con filamenti liberi e distinti, mentre le antere sono saldate in un manicotto (o tubo) circondante lo stilo. Le antere alla base sono acute. Il polline è tricolporato.

 Gineceo: lo stilo è filiforme, mentre gli stigmi dello stilo sono due divergenti e ricurvi. L'ovario è infero uniloculare formato da 2 carpelli. Gli stigmi sono filiformi e con superficie stigmatica interna.

Frutti. I frutti sono degli acheni con pappo. Gli acheni sono senza becco; il pappo può essere assente o formato da una coroncina apicale di squame anche lesiniformi.

 Biologia
 Impollinazione: l'impollinazione avviene tramite insetti (impollinazione entomogama tramite farfalle diurne e notturne).
 Riproduzione: la fecondazione avviene fondamentalmente tramite l'impollinazione dei fiori (vedi sopra).
 Dispersione: i semi (gli acheni) cadendo a terra sono successivamente dispersi soprattutto da insetti tipo formiche (disseminazione mirmecoria). In questo tipo di piante avviene anche un altro tipo di dispersione: zoocoria. Infatti gli uncini delle brattee dell'involucro si agganciano ai peli degli animali di passaggio disperdendo così anche su lunghe distanze i semi della pianta.

Distribuzione e habitat
La distribuzione delle specie di questo gruppo è circoscritta principalmente al Mediterraneo, Africa del Nord  e Asia occidentale. In Italia sono presenti i seguenti generi: Catananche e Scolymus.

Sistematica
La famiglia di appartenenza di questa voce (Asteraceae o Compositae, nomen conservandum) probabilmente originaria del Sud America, è la più numerosa del mondo vegetale, comprende oltre 23.000 specie distribuite su 1.535 generi, oppure 22.750 specie e 1.530 generi secondo altre fonti (una delle checklist più aggiornata elenca fino a 1.679 generi). La famiglia attualmente (2021) è divisa in 16 sottofamiglie.

Filogenesi
Il genere di questa voce appartiene alla sottotribù Scolyminae della tribù Cichorieae (unica tribù della sottofamiglia Cichorioideae). In base ai dati filogenetici la sottofamiglia Cichorioideae è il terz'ultimo gruppo che si è separato dal nucleo delle Asteraceae (gli ultimi due sono Corymbioideae e Asteroideae). La sottotribù Scolyminae è uno dei cladi iniziali che si sono separati dalla tribù. La posizione delle Scolyminae all'interno della tribù delle Cichorieae è abbastanza centrale e risulta  "gruppo fratello" di due grandi cladi a loro volta monofiletici: (1) Cichoriinae, Microseridinae, Hieraciinae e (2) Crepidinae, Chondrillinae, Hypochaeridinae, Hyoseridinae, Lactucinae.

La sottotribù è di recente costituzione; la circoscrizione attuale è stata fatta in base a studi molecolari di tipo filogenetico. Fino a pochi anni fa alcuni generi erano descritti in altri gruppi: Catananche e Hymenonema nella sottotribù Catananchinae e Gundelia nella tribù Gundelieae. La monofilia delle Scolyminae è ben supportata. All'interno della sottotribù i due generi Scolymus e Hymenonema formano un clade ben definito (monofiletico - il "core" della sottotribù), mentre il genere  Catananche è un "gruppo fratello" di questo clade; il genere  Gundelia, in posizione "basale", infine è un "gruppo fratello" di tutta la sottotribù.

Il seguente cladogramma indica la posizione dei generi nella sottotribù.

I caratteri più distintivi per questa sottotribù sono:
 i fusti sono alati;
 negli organi interni sono presenti sia condotti resiniferi che canali laticiferi;
 alcune parti delle piante possono essere spinose;
 l'origine delle specie è soprattutto relativa al Vecchio Mondo.

Il numero cromosomico delle specie della sottotribù è: 2n = 10 - 20. Sono presenti sia specie diploidi che tetraploidi.

Il genere Rothmaleria che nel passato veniva collegato alle Scolyminae, attualmente, secondo le ultime analisi molecolari è stato collegato al genere Tolpis e quindi messo nella sottotribù delle Cichoriinae.

Età di divergenza
Il tempo di divergenza stimato per Catananche e il clade Hymenonema-Scolymus dal loro più recente antenato comune è stimato in 17,5 milioni di anni. Per il tempo di divergenza tra gli ultimi due generi si ha 9,2 milioni di anni.  La diversificazione all'interno dei tre generi sembra molto più recente e va dal circa 5 milioni di anni per Catananche e circa 4 milioni di anni per Scolymus e solo circa 1.3 milioni di anni per Hymenonema.

Composizione della sottotribù
La sottotribù comprende 4 generi e 26 specie.

Specie spontanee italiane
In Italia allo stato spontaneo, per questa sottotribù, sono presenti le seguenti specie:Catananche:
 Catananche caerulea  L.
 Catananche lutea  L.Scolymus''' Scolymus grandiflorus Desf.
 Scolymus hispanicus  L.
 Scolymus maculatus''  L.

Note

Bibliografia

Altri progetti

Collegamenti esterni

 Scolyminae Global Compositae Checklist Database

Cichorioideae


Waiver must be signed and brought to camp in order to participate.
Please join the best camp staff in the country, and be taught by some of the best former and current college and professional coaches and players. Our staff is second to none! Camp staff includes former Georgia Tech Head Coach Bobby Cremins, Former NC State Head Coach Les Robinson, Former UNC Tarheel Star and former Appallachian State Head Coach Jason Capel, Former Steph Curry trainer Ryan Goodson, USBA Camp Director Chris Spatola. Some camps may also include Former Wake Forest Head Coach Dave Odom, Charlotte Hornet Scout Buzz Peterson, ESPN Analyst and former College Player of the year Jay Williams, and former UNC Tarheel great and UNC assistant coach Phil Ford, plus many more!!
All camps are open to any and all applicants, limited only by age and the number of participants.


Here comes a sneak (hands on) preview of the "Aiguille d'Or" GPHG winner, the Greubel Forsey Tourbillon 24 Secondes Vision. This is the second time, in just four years, that the manufacture has been awarded a prize, the most prestigious one actually, following the 2012 crowning of the Greubel Forsey Invention Piece 2 as "Best Complicated Watch".
The 24 seconds tourbillon, whose balance wheel and spring assembly lye on a surface inclined by a certain degree (that is actually not been declared), is encased into one of the sleekest and simplest design sets ever conceived by Robert and Stephen, it consists of a 43,5mm wide and 13,65mm thick case made of white gold that hosts a regulating system working at a 21,600 beats per hour and ensuring up to 72 hours of power reserve. The case plays a key role in determining such a classic take and such a reduced thickness, while still maintaining a hefty set of complications and a refined mechanical architecture. The main sapphire glass on the case back has been split into two parts and the watch features a second glass built in the shape of a flat bubble (to allow an acceptable wearability I guess); this is needed to provide enough room for the fast rotating 24 seconds tourbillon. I would like to find out why this particular tourbillon rotates at such a fast rate (2,5 times faster than any traditional 60 seconds tourbillon) and why it features an inclined displacement architecture and, hopefully, I will be able to satisfy my curiosity at next January's SIHH by asking this questions to the manufacturer's representatives directly (even though it has been explained somewhere else on the net I guess).
The upper and lower bridges of the tourbillon deserve a few additional words; they have undergone a long and precise hand polishing process that has given them a perfect shining appearance; that means no distortion at all, something that is very hard to achieve nowadays, unless your workshop employs the very best of craftsmen. The case back and the dial of the Greubel Forsey Tourbillon 24 Secondes Vision represent the two different sides of the same coin; the dial is extremely neat, with super slim blue hands and a solid gold dial with blue indexes that have been first engraved and then enameled using the so-called "oven-firing technique". At first glance it looks as if you weren't in the presence of a Greubel Forsey, given the apparent lack of technical and aesthetic complications that are usually associated to this brand, but as soon as you turn the case on its back side, you will instantly realize that every single element Greubel Forsey timepieces are renowned for is actually there. From the movement assembly or decoration to the Power Reserve indicator; it seems as if the manufacturer aimed at creating some sort of a tourbillon for an everyday use with the usual out-of-the-ordinary set of complications, high-quality finishes and top-notch craftsmanship that need to be discovered at a later stage. Produced in just 22 pieces, each Greubel Forsey Tourbillon 24 Secondes Vision (the one in the attached pictures is prototype n° 1) retails at 290,000CHF and I am kind of envious of those lucky 22 buyers who will be able to wear this timepiece during their business or vacation days.


In the picture above, you can see one side of checker board. Polished well in black and brown color. This checker board can also use as chess board. They have same square, same color, same amount of squares and same flat. The different one is the pieces which stand on it and the game rule.
This giant board is made of high quality Teak wood, so it is very durable. You can put it at your garden or your yard for years. You do not need to worry about the damage because we prepare the product for outdoors use. We have choose the best quality Teak wood as main material, so it will be safe for you to take it for outdoors use, such as parties, decoration, checker or chess games, photo section or another activity.


The very first suggestion is usually to consider if the furnishings are for the key bedroom and the guest bedroom. This is considerably important since each of those bedrooms have a specification. That's because the key bedroom is often the special case and also the guest bedroom is simply the standard case. In brief, select the right day bed bench for main bedroom and choose the regular for guest bedroom. The second thing is made from theme from the bedroom. If you're type who love to own nice color combination within your bedroom, then you will have to evaluate the color of the bedroom accessories.
To brighten our bedroom, we should prioritize the capabilities of our bedroom. A lot of people like to be effective in the bedroom, while the others look at a bedroom is definitely the area to rest only, free of your working things. We can easily limit what exactly home furniture we actually will need inside bedroom. Putting home furnishings which are much less useful only will lead to a disorganized appearance bed room. day bed bench are incredible. An item of furniture can be functioned for a few tasks, that can decrease the using of a lot of furniture specifically for a tiny bedroom.
Furniture is a form of decorative component and as well as residence complement to help keep any kinds of residence goods. Each of room space within a house need to be carried out with furniture. If you want finish your bedroom accessories, you may finish it with day bed bench . day bed bench is among the reliable furniture with good excellent material production, desirable style and durability for longer lasting make use of. The perception of furnishings are constantly up-graded. It is possible to decide on any varieties of furniture design ranging from classic to modern-day.
If you want a even larger living space to obtain, you may place your bed inside corner and have the still left living space filled with other things. You must also be certain that the keeping your things will not be crowded. That's because you will not want to obtain several things stacked within your bedroom. Many things within your bedroom could potentially cause you a less air to breathe. How's that for not recommendable for your health. Additional benefit that you may put other stuff within your bedroom with the space that cargo area has. That is the few tips you can apply when having a tiny bedroom and hopefully it could be useful.
So, for anyone who is one along with somewhat modest living space yet fairly lots to hold, day bed bench is one for you to test. Sleeping perfectly currently when your living space is a lot of tidier, some of private things are usually saved, and also the air is flowing for sure. Becoming personal space where inspiration and creativity made and applied, bedroom will almost always be that space for self actualization. And of course, self actualization has style actualization includes in it. Similar to funky ceiling lighting for bedroom that is practically part of everybody sense of art.
day bed bench can be one particular great sort of furniture for your bedroom. That's because the style of such a bedroom accessories is very great. Because, this bedroom accessories style is now the principle option in case you desire the good wanting bedroom accessories. If make sure that you have the good wanting home furniture within your bedroom, then you can certainly in addition try the day bed bench for your living space furniture. Nevertheless, before purchasing the bedroom furniture, it would be fine to take into consideration these tips very first.
There are a lot of day bed bench to be chosen by your self. The cost is also motley & the shape as well. When you feel like to pick up it at the utensils shop,confirm that the shape fit to your home type and tint. day bed bench is an important entity that can not be sequestered from your home. Possessing day bed bench at home not only improve the magnificence of your home but also able to gain the rate of your home. If your area is simple, don't put too many utensils & partition stuff, it exactly render your area appear small. For example if your home is modern, you may also choose day bed bench as well. Make sure not to locate utensils with different tint tone. If the flooring is stiff tone, you may also choose it with the natural tint as well & utensils has the alike than your day bed bench . If your home motif is rustic, do not try placing any modern entity or detect like elegance.
Related Post "Incredible Day Bed Bench"


Today is Valentine's Day, a day loved by some and despised by others. Regardless of where you sit on the Valentine's spectrum it is a day to think about those you love, and what could be so bad about that?
The first Valentine's cards or letters began in the 1400s. In Great Britain Valentine's Day began to be celebrated around the 17th century and Americans began exchanging hand-made valentines, as early as the early 1700s.
According to the Greeting Card Association, it is estimated that 1 billion Valentine's Day cards will be sent this year and according to Forbes, Americans will spend 18 billion dollars on Valentines purchases today.
So, whether you are a fan of the holiday or not. Acknowledging those we love on this day, is something human beings have been doing for centuries. We could all use a little more love in our world…regardless of your feelings about the holiday.
As January comes to a close, I realize it really has been quite a month. The post holiday recovery, a busy time for my non-profit day job, a new President, and few needed holidays. So it makes perfect sense that with all of this going on, that I have not really had time to make my New Year's resolutions. It is better late than never!
While I could barely get a parking spot at the gym, the first few weeks of the month…it seems that those well-intentioned souls are already beginning to slack off on their resolutions, which seems like the perfect time for me to kick in with mine. To help me along, I pulled out my trusty copy of Write It Down, Make It Happen by author, Henriette Anne Klauser. The book's author believes and proves that writing down your goals in life is the first step in achieving them.
The author tells stories of people who have done just that, and the way they began to realize their dreams. What I love the most about this book is that, in addition to asking you questions that slowly unravel your goals, each chapter ends with a little homework assignment. So as we say goodbye to January and hello to February, I have a clarity as to which direction I am headed in 2017. That in itself is an amazing resolution!
Last weekend, I attended my first TED talk. While I have listened to an occasional talk here and there, I am one of the rare people on the planet who is not addicted or really even familiar with TED. I was even more surprised when I learned that TED (which stands for Technology, Entertainment and Design) is a non-profit organization….but isn't everything these days?
The TED concept was created in 1984 from Richard Wurman's observation of three amazing fields converging, technology, entertainment and design. The very first TED talks included demos from revolutionary new products, the compact disc and the e-book. However, even with such a wow factor the conference and idea lost money and six years later, in 1990 Richard Wurman tried again and this time it worked.
A decade later, media entrepreneur, Chris Anderson met with Wurman and in 2001 Anderson's non-profit, the Sapling Foundation acquired TED. Anderson believed in the concepts that make TED great and was determined to seek out the most interesting people on the planet and let them communicate their passion.
So as I sat in an auditorium and listened to speakers talk on such topics as, The Future of Women in Science, Troubled Water on water conservation, Transforming Prisons from the Inside, Out, Accepting my transgender daughter, and the list goes on….I was inspired. Each speaker and topic more unique than the previous, and yet they were all the same.
What was it that made this very different group the same? Their passion. Each speaker was passionate about their topic and their passion and insight was real, it was human and the hundreds of us in the audience became one…..and that is the magic of TED.
Have you ever heard a speaker who left you thinking? Really thinking? Two weeks ago, I attended an event down at USC that left me deep in thought. The talk was given by a local priest who had worked with Mother Teresa years ago in Calcutta, when he was on a year's sabbatical. The Monsignor spoke about being lost and shared his journey of self discovery during his time in India serving the poor.
Something to think about for sure…..
I'm not sure how you snuck up on us, but I am so glad that you are here.
October means football, fall leaves, corn chowder, pumpkin carving and trick or treating.
October reminds us of the beauty all around, and is natures way of telling us to be grateful.
Here is to a month of gratitude and joy spent with ones you love.
When actor Gene Wilder passed away a few weeks back, I was reminded of his beautiful love affair with Gilda Radner and their subsequent involvement in cancer support. Wilder's death coincided with a lunch catch up with a friend, who works for the organization that helped Gilda Radner through her battle with ovarian cancer, Cancer Support Community.
As I caught up with my friend, Meg Symes of Cancer Support Community, she told me her own story of watching her mother go through cancer in the 70s without the support, community or a place to go where it was "socially acceptable to have cancer." When cancer struck Meg decades later, she was blessed to have the resources her mother did not. When the opportunity presented itself to be a part of supporting those with cancer Meg was all in.
Meg explained that Cancer Support Community was founded in 1982 by Dr. Harold Benjamin to provide free support, cancer education and hope. "So no one needs to face cancer alone," patients and their families learn skills to enable them to regain control and restore hope. Patients and families can attend workshops, classes, yoga and come to a safe warm welcoming place that feels like home and gives the support needed to take on cancer.
In the Pasadena chapter alone, Cancer Support Community serves over 1,100 people a year, all free of charge. Today, Dr. Benjamin's concept of providing support, education and hope for people with cancer has expanded to over 100 locations worldwide. Regardless if you were Gilda Radner, who attended the Santa Monica location or in Tokyo or someone here in Pasadena, because of people like Meg and thousands of donors and volunteers…..no one has to face cancer alone.


September is highlighted by one of the nation's premiere obstacle course races, the artsiest night of the year, a chance to give back and, of course, the biggest music fest to end summer!
Click Here to check out the month's full calendar of events and check below for some of the biggest highlights.
Historic Downtown Mansfield comes alive with four stages of live music, interactive art exhibits, food and fun for the whole family.
You don't want to miss one of the biggest music events of the year for the entire DFW area.
Click Here for the full event schedule, map and parking information.
Take part in the annual North Texas Giving Day with a massive event bringing together all the major local charities and non-profits that you can support. Food trucks will be on site, there will be fun activities for families and it all corresponds with the monthly Third Thursday event in Historic Downtown Mansfield.
The premiere arts event for the year, held at the Walnut Creek Country Club. Enjoy live music, art demonstrations, magic, take part in the silent auction and enjoy an amazing dinner you won't forget!
ArtScapes was named 2017's "Best Event to Benefit A Cause" by the Texas Festivals and Events Association.
This is a charity event with the money raised going to support the Mansfield Commission for the Arts.
Click Here for more event info and to buy tickets.
The world famous obstacle and endurance race is coming right to the Mansfield area, just minutes south on Hwy 287 at TexPlex Park.
This marks the official DFW Tough Mudder for 2018 so you don't want to miss out on this!


text:
Future of Work RoundUp - Week of August 29
Rebecca Hinds
Aug 29, 2022 • 2 min read
Photo by Surface / Unsplash
Welcome to the Future of Work Roundup. Each week, we bring you five top stories—drawing from the latest academic research and industry trends—to give you an easily-digestible snapshot of how work is changing—and why it matters.
The Great Boomerang?
CNBC reported that the workers who are landing the biggest raises and promotions aren't just changing jobs as part of the Great Resignation and the Great Reshuffle—they are boomerang back to their previous employers. In the first four months of 2022, the average boomerang employee scored a 28% pay raise by returning to their previous employer (as compared to their pay when they resigned).
Hump days are now office days
The Wall Street Journal cited research that found that Wednesday is the most popular in-office day for U.S. workers. This finding is a bit perplexing and contrasts with some experts' views that Wednesday is the best day to work from home. Perhaps the trend is being driven by workers who come into the office only one day per week—for them, "hump day" is a natural breakpoint to work from the office.
Productivity surveillance
According to Bloomberg, a senator has urged the Biden administration to regulate worker-monitoring technologies. This comes on the heels of a New York Times report that found that eight out of the 10 largest private employers in the U.S. are tracking their employees' productivity. With the shift to remote work and advances in ML and AI technology, work surveillance is likely to feature prominently in discussions of the future of work.
Lower voice adds leadership credibility—sometimes.
A new study finds that when leaders have lower-pitched voices, they are perceived to be trustworthy. Importantly though, the study found that gender moderates the relationship such that when females have lower-pitched voices the relationship is much weaker. The study adds a new layer to the debate over whether Elizabeth Holmes' deep voice was, in fact, a power move.
Office attendance differs by sector
The World Economic Forum reported on a new survey that found that office attendance differs notably by sector. Perhaps not surprisingly, banking tops the list in terms of the greatest portion of the workforce attending the office daily (47%), whereas the logistics and tech sectors seem to have most vigorously adopted remote work, with only 15% of the workforce clocking into the office each day.
Thanks for reading. Stay tuned for next week's Future of Work roundup.

redpajama_set_name: RedPajamaCommonCrawl


It's Wednesday night, but I think I can skip ahead. There is no reason to leave such a depressing blog up for too long.
Here's what I'm thankful for.
My sweet friend Kim coming over to help me clean & decorate for Silas' party tomorrow!
Paper chains to decorate with the kids.
That Glor will be getting her permanent cast on Friday. I'm thinking it will be easier to clean - let's just hope it's still pink.
Elias & Glory's new game, "I GET YOU!"
For Nativity Sets. The toddlers have been playing those things like trading cards. After breakfast, Elias will bribe Glory to "swish merrrrry", meaning give him the mother of Jesus figure. She's the hot commodity. Her and the donkeys that they call horseys.
Coffee. What a great creation.
The Bible. Mine is waiting on me to go to bed and wake up for our early date tomorrow. Which makes me smile.
So, friendlies - what are you thankful for?


text:
// -*- c++ -*-
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

//                  O S C L _ M E M

// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

/*! \addtogroup osclmemory OSCL Memory
 *
 * @{
 */

/*! \file oscl_mem.h
    \brief This file contains basic memory definitions for common use across platforms.

    This is the main entry point header file for the OSCL memory library.  It should be
    the only one users directly include.  Basic memory copy, compare, and move functions
    are defined here as well as the allocation functions.
*/

#ifndef OSCL_MEM_H_INCLUDED
#define OSCL_MEM_H_INCLUDED

#ifndef OSCLCONFIG_MEMORY_H_INCLUDED
#include "osclconfig_memory.h"
#endif

#ifndef OSCL_BASE_H_INCLUDED
#include "oscl_base.h"
#endif

#ifndef OSCL_TYPES_H_INCLUDE
#include "oscl_types.h"
#endif

#ifndef OSCL_ASSERT_H_INCLUDED
#include "oscl_assert.h"
#endif

#ifndef OSCL_MEM_BASIC_FUNCTIONS_H
#include "oscl_mem_basic_functions.h"
#endif

#ifndef OSCL_LOCK_BASE_H_INCLUDED
#include "oscl_lock_base.h"
#endif

#define OSCL_DISABLE_WARNING_TRUNCATE_DEBUG_MESSAGE
#include "osclconfig_compiler_warnings.h"

#ifndef OSCL_MEM_INST_H_INCLUDED
#include "oscl_mem_inst.h"
#endif

#ifndef OSCL_HEAPBASE_H_INCLUDED
#include "oscl_heapbase.h"
#endif

//Default for OSCL_HAS_GLOBAL_NEW_DELETE in case it is *not* defined
//in the osclconfig_memory.h
#ifndef OSCL_HAS_GLOBAL_NEW_DELETE
#ifdef NDEBUG
//Release Mode - No definition for global new and delete.
#define OSCL_HAS_GLOBAL_NEW_DELETE 0
#else
//Debug Mode - Define global new and delete.
#define OSCL_HAS_GLOBAL_NEW_DELETE 1
#endif //NDEBUG
#endif //OSCL_HAS_GLOBAL_NEW_DELETE

class OsclMem
{
    public:
        /** Per-thread initialization of Oscl Memory
        **   @param lock: A lock class for use with multi-threaded applications.
        **      The lock is needed in use cases where memory may be allocated
        **      in one thread and freed in another.  In this case, there must
        **      be a single lock object, and its pointer must be passed to
        **      the OsclMem::Init call in each thread.
        **      If no lock is provided, the memory manager will not be thread-safe.
        ** @exception: Leaves on error
        */
        OSCL_IMPORT_REF static void Init();

        /** Per-thread cleanup of Oscl Memory
        ** @exception: Leaves on error;
        */
        OSCL_IMPORT_REF static void Cleanup();

};

/*
** Choose whether to use per-thread or singleton registry for auditing
*/
#include "oscl_base.h"

/*
** Audit control block
*/
#if (OSCL_BYPASS_MEMMGT)
//empty class for compilation only
class OsclAuditCB
{
    public:
};
#else
class OsclMemStatsNode;
class OsclMemAudit;
class OsclAuditCB
{
    public:
        const OsclMemStatsNode* pStatsNode;
        OsclMemAudit *pAudit;

        OsclAuditCB() :
                pStatsNode(NULL),
                pAudit(NULL)
        {}

        OsclAuditCB(const OsclMemStatsNode* myStatsNode,
                    OsclMemAudit *ptr)
                :
                pStatsNode(myStatsNode),
                pAudit(ptr)
        {
        }
};
#endif//OSCL_BYPASS_MEMMGT

/**
 * Get memory-aligned size of an object.
 *
 * @param size size of object
 *
 * @returns memory-aligned size
 */
OSCL_COND_IMPORT_REF uint oscl_mem_aligned_size(uint size);

/**
 * Initialize an OsclAuditCB object.
 * Sets the stats node pointer to null, and sets the
 * audit pointer to the global audit object.
 *
 * @param auditCB memory management audit object
 */
OSCL_IMPORT_REF void OsclMemInit(OsclAuditCB & auditCB);

/**
 * Cleans up the base class of a partially-constructed
 * derived class.  This macro will call the destructor
 * if necessary, based on the error-handling implementation.
 *
 * @param T: name of the base class.
 */
#define OSCL_CLEANUP_BASE_CLASS(T) _OSCL_CLEANUP_BASE_CLASS(T)

/** *******************************************************
 * Macros for new/delete with a given allocator/deallocator.
 */

/**
 * Creates an object of type T using the given allocator to
 * acquire the memory needed.
 *
 * @param T_allocator allocator for objects of type T, must be
 *    an Oscl_TAlloc<T, Allocator>, where Allocator is an Oscl_DefAlloc
 * @param T           type of object to create
 * @param params      object initialization parameters
 *
 * @return pointer to created object
 *
 * @exception none, unless thrown by the given allocator
 */
#if(OSCL_BYPASS_MEMMGT)
#define OSCL_ALLOC_NEW(T_allocator, T, params) new(T_allocator.allocate(1)) T params
#elif(PVMEM_INST_LEVEL>0)
#define OSCL_ALLOC_NEW(T_allocator, T, params) new(T_allocator.allocate_fl(1,__FILE__,__LINE__)) T params
#else
#define OSCL_ALLOC_NEW(T_allocator, T, params) new(T_allocator.allocate(1)) T params
#endif

/**
 * Creates an object of type T using the given allocator to
 * acquire the memory needed.
 * This macro is similar to OSCL_ALLOC_NEW except that it
 * handles constructors that leave.
 * If the constructor leaves, the destructor will be called,
 * and allocated memory will be freed before allowing the
 * leave to propagate to the next level.
 *
 * @param T_ptr    variable to hold return value-- pointer to
 *                 new object of type T.
 * @param T_allocator allocator for objects of type T, must be
 *    an Oscl_TAlloc<T, Allocator>, where Allocator is an
 *    Oscl_DefAlloc
 * @param T        type of object to create
 * @param params   object initialization parameters
 *
 * @return pointer to created object
 *
 * @exception none, unless thrown by the given allocator
 */
#if(OSCL_BYPASS_MEMMGT)
#define OSCL_TRAP_ALLOC_NEW(T_ptr,T_allocator,T,params) _OSCL_TRAP_NEW(T_allocator.allocate(1),T_allocator.deallocate,T_ptr,T,params)
#elif(PVMEM_INST_LEVEL>0)
#define OSCL_TRAP_ALLOC_NEW(T_ptr,T_allocator,T,params) _OSCL_TRAP_NEW(T_allocator.allocate_fl(1,__FILE__,__LINE__),T_allocator.deallocate,T_ptr,T,params)
#else
#define OSCL_TRAP_ALLOC_NEW(T_ptr,T_allocator,T,params) _OSCL_TRAP_NEW(T_allocator.allocate(1),T_allocator.deallocate,T_ptr,T,params)
#endif

/**
 * Deletes the object of type T using the given allocator
 *
 * @param T_allocator allocator for objects of type T
 * @param T           type of object to delete
 * @param ptr         pointer to previously created object
 *
 * @exception none, unless thrown by the given allocator
 */
#define OSCL_ALLOC_DELETE(ptr, T_allocator, T) \
  {\
  ptr->~T();\
  T_allocator.deallocate(ptr);\
  }

/** *******************************************************
 * Macros for malloc/free with memory management.
 */

//These are for internal use but need to be visible since they're used
//in macros.
#if(!OSCL_BYPASS_MEMMGT)
OSCL_IMPORT_REF void* _oscl_audit_malloc(size_t , OsclAuditCB & , const char * f = NULL, const int l = 0);
OSCL_IMPORT_REF void* _oscl_audit_calloc(size_t , size_t, OsclAuditCB & , const char * f = NULL, const int l = 0);
OSCL_IMPORT_REF void* _oscl_audit_realloc(void*, size_t , OsclAuditCB & , const char * f = NULL, const int l = 0);
OSCL_IMPORT_REF void* _oscl_audit_new(size_t , OsclAuditCB & , const char * f = NULL, const int l = 0) ;
OSCL_IMPORT_REF void* _oscl_default_audit_malloc(size_t , const char * f = NULL, const int l = 0);
OSCL_IMPORT_REF void* _oscl_default_audit_calloc(size_t , size_t, const char * f = NULL, const int l = 0);
OSCL_IMPORT_REF void* _oscl_default_audit_realloc(void*, size_t , const char * f = NULL, const int l = 0);
OSCL_IMPORT_REF void* _oscl_default_audit_new(size_t , const char * f = NULL, const int l = 0) ;
OSCL_IMPORT_REF void _oscl_audit_free(void *);
#else
OSCL_IMPORT_REF void* _oscl_default_new(size_t nBytes);
#endif//OSCL_BYPASS_MEMMGT

#if (OSCL_HAS_GLOBAL_NEW_DELETE)
//Global New operator overloaded to check native new operators called

#if(!OSCL_BYPASS_MEMMGT)
inline void * operator new(size_t aSize, const char *aFile, int aLine)
{
#if(PVMEM_INST_LEVEL>0)
    //in case NULL is passed in, record this file & line #
    if (!aFile)
        return _oscl_default_audit_new(aSize, __FILE__, __LINE__);
#endif
    return _oscl_default_audit_new(aSize, aFile, aLine);
};
#endif

inline void * operator new(size_t aSize)
{
#if(!OSCL_BYPASS_MEMMGT)
#if(PVMEM_INST_LEVEL>0)
    return _oscl_default_audit_new(aSize, __FILE__, __LINE__);
#else
    return _oscl_default_audit_new(aSize);
#endif
#else
    return _oscl_default_new(aSize);
#endif
};

inline void operator delete(void *aPtr)
{
#if(!OSCL_BYPASS_MEMMGT)
    _oscl_audit_free(aPtr);
#else
    _oscl_free(aPtr);
#endif
};

#if(!OSCL_BYPASS_MEMMGT)
inline void * operator new[](size_t aSize, const char *aFile, int aLine)
{
#if(PVMEM_INST_LEVEL>0)
    //in case NULL is passed in, record this file & line #
    if (!aFile)
        return _oscl_default_audit_new(aSize, __FILE__, __LINE__);
#endif
    return _oscl_default_audit_new(aSize, aFile, aLine);
};
#endif

inline void * operator new[](size_t aSize)
{
#if(!OSCL_BYPASS_MEMMGT)
#if(PVMEM_INST_LEVEL>0)
    return _oscl_default_audit_new(aSize, __FILE__, __LINE__);
#else
    return _oscl_default_audit_new(aSize);
#endif
#else
    return _oscl_default_new(aSize);
#endif
};

inline void operator delete[](void *aPtr)
{
#if(!OSCL_BYPASS_MEMMGT)
    _oscl_audit_free(aPtr);
#else
    _oscl_free(aPtr);
#endif
};
#endif //OSCL_HAS_GLOBAL_NEW_DELETE

/**
 * Allocates a memory block using the memory management's
 * global audit object.
 *
 * @param count  number of bytes to allocate
 *
 * @return a void pointer to the allocated space, or NULL if there is insufficient
 *         memory available.
 *
 * @exception none
 */
#if(OSCL_BYPASS_MEMMGT)
#define OSCL_MALLOC(count) _oscl_malloc(count)
#elif(PVMEM_INST_LEVEL>0)
#define OSCL_MALLOC(count) _oscl_default_audit_malloc(count,__FILE__,__LINE__)
#else
#define OSCL_MALLOC(count) _oscl_default_audit_malloc(count)
#endif

/*
** The public oscl_malloc call has been deprecated.
** PV code should call OSCL_MALLOC.
** This macro is defined for back-compatibility.
*/
#define oscl_malloc(a) OSCL_MALLOC(a)

/**
 * Another back-compatibility definition.
 */
#define OSCL_DEFAULT_MALLOC(x) OSCL_MALLOC(x)

/**
* Allocates a memory block using the given audit object.
*
* @param auditCB input memory management audit object
* @param count   number of bytes to allocate
*
* @return a void pointer to the allocated space, or NULL if there is insufficient
*         memory available.
*
* @exception none
*/
#if(OSCL_BYPASS_MEMMGT)
#define OSCL_AUDIT_MALLOC(auditCB, count) _oscl_malloc(count)
#elif(PVMEM_INST_LEVEL>0)
#define OSCL_AUDIT_MALLOC(auditCB, count) _oscl_audit_malloc(count, auditCB, __FILE__, __LINE__)
#else
#define OSCL_AUDIT_MALLOC(auditCB, count) _oscl_audit_malloc(count, auditCB)
#endif

/**
 * Allocates a memory block using the memory management's
 * global audit object.  The block is initialized to zero.
 *
 * @param num  number of elements
 * @param size  number of bytes to allocate for each element
 *
 * @return a void pointer to the allocated space, or NULL if there is insufficient
 *         memory available.
 *
 * @exception none
 */
#if(OSCL_BYPASS_MEMMGT)
#define OSCL_CALLOC(num,size) _oscl_calloc(num,size)
#elif(PVMEM_INST_LEVEL>0)
#define OSCL_CALLOC(num,size) _oscl_default_audit_calloc(num,size,__FILE__,__LINE__)
#else
#define OSCL_CALLOC(num,size) _oscl_default_audit_calloc(num,size)
#endif

/*
** The public oscl_calloc call has been deprecated.
** PV code should call OSCL_CALLOC.
** This macro is defined for back-compatibility.
*/
#define oscl_calloc(a,b) OSCL_CALLOC(a,b)

/**
* Allocates a memory block using the specified
* audit object.  The block is initialized to zero.
*
* @param auditCB input memory management audit object
* @param num  number of elements
* @param size  number of bytes to allocate for each element
*
* @return a void pointer to the allocated space, or NULL if there is insufficient
*         memory available.
*
* @exception none
*/
#if(OSCL_BYPASS_MEMMGT)
#define OSCL_AUDIT_CALLOC(auditCB, num,size) _oscl_calloc(num,size)
#elif(PVMEM_INST_LEVEL>0)
#define OSCL_AUDIT_CALLOC(auditCB, num,size) _oscl_audit_calloc(num,size, auditCB, __FILE__, __LINE__)
#else
#define OSCL_AUDIT_CALLOC(auditCB, num,size) _oscl_audit_calloc(num,size, auditCB)
#endif

/**
 * Re-Allocates a memory block using the memory management's
 * global audit object.
 *
 * @param ptr  original memory block
 * @param new_size  New size of the block
 *
 * @return a void pointer to the allocated space, or NULL if there is insufficient
 *         memory available.
 *
 * @exception none
 */
#if(OSCL_BYPASS_MEMMGT)
#define OSCL_REALLOC(ptr,new_size) _oscl_realloc(ptr,new_size)
#elif(PVMEM_INST_LEVEL>0)
#define OSCL_REALLOC(ptr,new_size) _oscl_default_audit_realloc(ptr,new_size,__FILE__,__LINE__)
#else
#define OSCL_REALLOC(ptr,new_size) _oscl_default_audit_realloc(ptr,new_size)
#endif

/*
** The public oscl_realloc call has been deprecated.
** PV code should call OSCL_REALLOC.  This macro is
** defined for back-compatibility.
*/
#define oscl_realloc(a,b) OSCL_REALLOC(a,b)

/**
* Re-Allocates a memory block using the specified
* audit object.
*
* @param auditCB input memory management audit object
* @param ptr  original memory block
* @param new_size  New size of the block
*
* @return a void pointer to the allocated space, or NULL if there is insufficient
*         memory available.
*
* @exception none
*/
#if(OSCL_BYPASS_MEMMGT)
#define OSCL_AUDIT_REALLOC(auditCB, ptr,new_size) _oscl_realloc(ptr,new_size)
#elif(PVMEM_INST_LEVEL>0)
#define OSCL_AUDIT_REALLOC(auditCB, ptr,new_size) _oscl_audit_realloc(ptr,new_size, auditCB, __FILE__, __LINE__)
#else
#define OSCL_AUDIT_REALLOC(auditCB, ptr,new_size) _oscl_audit_realloc(ptr,new_size, auditCB)
#endif

/**
 * Deallocates or frees a memory block.
 *
 * @param ptr    pointer to previously allocated memory block using the given audit object
 */
#if(OSCL_BYPASS_MEMMGT)
#define OSCL_FREE(ptr) _oscl_free(ptr)
#else
#define OSCL_FREE(ptr) _oscl_audit_free(ptr)
#endif

/*
** The public oscl_free call has been deprecated.
** PV code should call OSCL_FREE.
** This macro is defined for back-compatibility.
*/
#define oscl_free(x) OSCL_FREE(x)

/**
 * Another back-compatibility definition.
 */
#define OSCL_DEFAULT_FREE(x) OSCL_FREE(x)

/** *******************************************************
 * Macros for new/delete with memory management.
 */

/**
 * Oscl "new" operator.  This uses the global memory
 * audit object.
 *
 * @param T       data type for 'new' operation
 * @param params  object initialization parameters
 *
 * @return pointer to the newly created object of type T
 *
 * @exception may leave with code = bad alloc
 *
 *
 */
#if(OSCL_BYPASS_MEMMGT)
#define OSCL_NEW( T, params) new T params
#elif!(OSCL_HAS_GLOBAL_NEW_DELETE)
#define OSCL_NEW( T, params) new T params
#elif(PVMEM_INST_LEVEL>0)
#define OSCL_NEW( T, params) new(__FILE__,__LINE__) T params
#else
#define OSCL_NEW( T, params) new T params
#endif

/********************************************************
 * Macro for placement new
 *
 * @param ptr          pointer to an object
 *
 * @param constructor  constructor of the class for the object
 *
********************************************************/
#define OSCL_PLACEMENT_NEW(ptr, constructor) new(ptr) constructor

/**
 * Oscl "new" operator.  This uses the global memory
 * audit object.  This operator is similar to OSCL_NEW
 * except that it will handle constructors that leave.
 * If the constructor leaves, the destructor will be called,
 * and allocated memory will be freed before allowing the
 * leave to propagate to the next level.
 *
 * @param T_ptr   variable to hold return value-- pointer to
 *                new object of type T.
 * @param T       data type for 'new' operation
 * @param params  object initialization parameters
 *
 * @return pointer to the newly created object of type T
 *
 * @exception may leave with code = bad alloc
 *
 *
 */
#if(OSCL_BYPASS_MEMMGT)
#define OSCL_TRAP_NEW(T_ptr,T,params) _OSCL_TRAP_NEW(_oscl_default_new(sizeof(T)),_oscl_free,T_ptr,T,params)
#elif!(OSCL_HAS_GLOBAL_NEW_DELETE)
#define OSCL_TRAP_NEW(T_ptr,T,params) _OSCL_TRAP_NEW(_oscl_default_audit_new(sizeof(T)),_oscl_audit_free,T_ptr,T,params)
#elif(PVMEM_INST_LEVEL>0)
#define OSCL_TRAP_NEW(T_ptr,T,params) _OSCL_TRAP_NEW(_oscl_default_audit_new(sizeof(T),__FILE__,__LINE__),_oscl_audit_free,T_ptr,T,params)
#else
#define OSCL_TRAP_NEW(T_ptr,T,params) _OSCL_TRAP_NEW(_oscl_default_audit_new(sizeof(T)),_oscl_audit_free,T_ptr,T,params)
#endif

/**
 * Oscl "new" operator.  This uses the specified memory
 * audit object.
 *
 * @param auditCB input memory management audit object
 * @param T       data type for 'new' operation
 * @param params  object initialization parameters
 *
 * @return pointer to the newly created object of type T
 *
 * @exception may leave with code = bad alloc
 *
 */
#if(OSCL_BYPASS_MEMMGT)
#define OSCL_AUDIT_NEW(auditCB, T, params) new(_oscl_default_new(sizeof(T))) T params
#elif!(OSCL_HAS_GLOBAL_NEW_DELETE)
#define OSCL_AUDIT_NEW(auditCB, T, params) new(_oscl_audit_new(sizeof(T),auditCB)) T params
#elif(PVMEM_INST_LEVEL>0)
#define OSCL_AUDIT_NEW(auditCB, T, params) new(_oscl_audit_new(sizeof(T),auditCB,__FILE__,__LINE__)) T params
#else
#define OSCL_AUDIT_NEW(auditCB, T, params) new(_oscl_audit_new(sizeof(T),auditCB)) T params
#endif

/**
 * Oscl "new" operator.  This uses the specified memory
 * audit object.  This macro is similar to OSCL_AUDIT_NEW
 * except that it will handle constructors that leave.
 * If the constructor leaves, the destructor will be called,
 * and allocated memory will be freed before allowing the
 * leave to propagate to the next level.
 *
 * @param T_ptr   variable to hold return value-- pointer to
 *                new object of type T.
 * @param auditCB input memory management audit object
 * @param T       data type for 'new' operation
 * @param params  object initialization parameters
 *
 * @return pointer to the newly created object of type T
 *
 * @exception may leave with code = bad alloc
 *
 */
#if(OSCL_BYPASS_MEMMGT)
#define OSCL_TRAP_AUDIT_NEW(T_ptr,auditCB,T,params) _OSCL_TRAP_NEW(_oscl_default_new(sizeof(T)),_oscl_free,T_ptr,T,params)
#elif!(OSCL_HAS_GLOBAL_NEW_DELETE)
#define OSCL_TRAP_AUDIT_NEW(T_ptr,auditCB,T,params) _OSCL_TRAP_NEW(_oscl_audit_new(sizeof(T),auditCB),_oscl_audit_free,T_ptr,T,params)
#elif(PVMEM_INST_LEVEL>0)
#define OSCL_TRAP_AUDIT_NEW(T_ptr,auditCB,T,params) _OSCL_TRAP_NEW(_oscl_audit_new(sizeof(T),auditCB,__FILE__,__LINE__),_oscl_audit_free,T_ptr,T,params)
#else
#define OSCL_TRAP_AUDIT_NEW(T_ptr,auditCB,T,params) _OSCL_TRAP_NEW(_oscl_audit_new(sizeof(T),auditCB),_oscl_audit_free,T_ptr,T,params)
#endif

/**
 * Oscl "delete" operator.
 *
 * @param ptr pointer to memory block previously allocated with OSCL_NEW
 *
 * @return void
 */
#define OSCL_DELETE(ptr) {\
    if(ptr){delete(ptr);}\
}

/** *******************************************************
 * Macros for array new/delete with memory management.
 * These only work for simple array types and cannot
 * be used for class types with constructor/destructors.
 *
 * Note: some compilers do not support placement array
 * new operator, so these macros don't use it.
 */

/**
 * Oscl array "new" operator.  This uses the input memory
 * audit object.
 *
 * @param auditCB input memory management audit object
 * @param T       data type for 'new' operation
 * @param count   number of elements to create
 *
 * @return pointer to the newly created object array of type T
 *
 * @exception may leave with code = bad alloc
 *
 *
 */
#if(OSCL_BYPASS_MEMMGT)
#define OSCL_AUDIT_ARRAY_NEW(auditCB, T, count) new(_oscl_default_new(sizeof(T)*(count))) T
#elif!(OSCL_HAS_GLOBAL_NEW_DELETE)
#define OSCL_AUDIT_ARRAY_NEW(auditCB, T, count) new(_oscl_audit_new(sizeof(T)*(count),auditCB)) T
#elif(PVMEM_INST_LEVEL>0)
#define OSCL_AUDIT_ARRAY_NEW(auditCB, T, count) new(_oscl_audit_new(sizeof(T)*(count),auditCB,__FILE__,__LINE__)) T
#else
#define OSCL_AUDIT_ARRAY_NEW(auditCB, T, count) new(_oscl_audit_new(sizeof(T)*(count),auditCB)) T
#endif

/**
 * Oscl array "new" operator.  This uses the global memory
 * audit object.
 *
 * @param T       data type for 'new' operation
 * @param count   number of elements to create
 *
 * @return pointer to the newly created object array of type T
 *
 * @exception may leave with code = bad alloc
 *
 *
 */
#if(OSCL_BYPASS_MEMMGT)
#define OSCL_ARRAY_NEW(T, count) new T[count]
#elif!(OSCL_HAS_GLOBAL_NEW_DELETE)
#define OSCL_ARRAY_NEW(T, count) new T[count]
#elif(PVMEM_INST_LEVEL>0)
#define OSCL_ARRAY_NEW(T, count) new(__FILE__,__LINE__) T[count]
#else
#define OSCL_ARRAY_NEW(T, count) new T[count]
#endif

/**
 * Oscl array delete operator..
 *
 * @param ptr pointer to memory block previously allocated with OSCL_ARRAY_NEW
 *
 * @return void
 */
#define OSCL_ARRAY_DELETE(ptr) delete [] ptr

/**
* Previously this was in oscl_mem_imp.h
*/

#ifndef OSCL_DEFALLOC_H_INCLUDED
#include "oscl_defalloc.h"
#endif

#ifndef OSCL_REFCOUNTER_H_INCLUDED
#include "oscl_refcounter.h"
#endif

#ifndef OSCL_MEM_BASIC_FUNCTIONS_H_INCLUDED
#include "oscl_mem_basic_functions.h"
#endif

#ifndef OSCL_ERROR_H_INCLUDED
#include "oscl_error.h"
#endif

#ifndef OSCL_EXCEPTION_H_INCLUDED
#include "oscl_exception.h"
#endif

#define OSCL_DISABLE_WARNING_TRUNCATE_DEBUG_MESSAGE
#include "osclconfig_compiler_warnings.h"

// This macro is defined is osclconfig_compiler_warnings.h
// This GCC #pragma turns off compiler warning for the rest of this header file
// This needs to be done because with the GCC 4.1 toolchain, many compiler warnings
// are generated because Oscl_MemAllocator and Oscl_MemBasicAllocator have virtual functions, but
// no virtual destructor.
// An attempt has been made to add the virtual destructors, however, it resulted
// in run time crashes indicative of double freeing of memory.
// This is a temporary fix, until the crashes are resolved.
//
#ifdef OSCL_DISABLE_GCC_WARNING_SYSTEM_HEADER
#pragma GCC system_header
#endif

/** \class OsclMemAllocator
** A simple allocator class.  Configurable as to whether
** this goes through the memory manager or not.
**
*/
class OsclMemAllocator : public Oscl_DefAlloc
{
    public:
        /** This API throws an exception when malloc returns NULL.
          * n must be greater than 0.
          *
          * @return pointer (or Leave with OsclErrNoMemory )
          *
          */
        OsclAny* allocate(const uint32 n)
        {
#if(OSCL_BYPASS_MEMMGT)
            OsclAny* p = _oscl_malloc(n);
            if (!p)
                OsclError::LeaveIfNull(p);
#if OSCL_MEM_FILL_WITH_PATTERN
            oscl_memset(p, 0x55, n);
#endif
            return (p);
#elif (PVMEM_INST_LEVEL>0)
            //this is really a usage error-- caller should provide file & line.
            //set a debug breakpoint here...
            return allocate_fl(n, __FILE__, __LINE__);
#else
            return allocate_fl(n, NULL, 0);
#endif
        }

#if(!OSCL_BYPASS_MEMMGT)
        OsclAny* allocate_fl(const uint32 n, const char * file_name, const int line_num)
        {
            OsclAny* p = _oscl_default_audit_malloc(n, file_name, line_num);
            if (!p)
                OsclError::LeaveIfNull(p);
#if OSCL_MEM_FILL_WITH_PATTERN
            oscl_memset(p, 0x55, n);
#endif
            return (p);
        }
#endif

        void deallocate(OsclAny* p)
        {
            if (p)
                OSCL_FREE(p);
        }
};

/** \class OsclMemBasicAllocator
** A simple allocator class that does not use the memory management.
**
** Note: this allocator is for internal use by Oscl only.  Higher
** level code should use OsclMemAllocator.
**
*/
class OsclMemBasicAllocator : public Oscl_DefAlloc
{
    public:
        /** This API throws an exception when malloc returns NULL.
          * n must be greater than 0.
          *
          * @return pointer (or Leave with OsclErrNoMemory )
          *
          */
        OsclAny* allocate(const uint32 n)
        {
            OsclAny* p = _oscl_malloc(n);
            OsclError::LeaveIfNull(p);
#if OSCL_MEM_FILL_WITH_PATTERN
            oscl_memset(p, 0x55, n);
#endif
            return (p);
        }

        void deallocate(OsclAny* p)
        {
            if (p)
                _oscl_free(p);
        }
};

/** \class OsclMemAllocDestructDealloc
** An OsclAllocDestructDealloc class that uses
** OsclMemAllocator.
*/
template <class T> class OsclMemAllocDestructDealloc : public OsclAllocDestructDealloc
{
    public:
#if !(OSCL_BYPASS_MEMMGT)
        OsclAny* allocate_fl(const uint32 size, const char * file_name, const int line_num)
        {
            return alloc.allocate_fl(size, file_name, line_num);
        }
#endif
        OsclAny* allocate(const uint32 size)
        {
#if(OSCL_BYPASS_MEMMGT)
            return alloc.allocate(size);
#elif(PVMEM_INST_LEVEL>0)
            //this is really a usage error-- caller should provide file & line.
            //set a debug breakpoint here...
            return allocate_fl(size, __FILE__, __LINE__);
#else
            return allocate_fl(size, NULL, 0);
#endif
        }
        void deallocate(OsclAny* p)
        {
            alloc.deallocate(p);
        }
        void destruct_and_dealloc(OsclAny* p)
        {
            T* ptr = reinterpret_cast<T*>(p);
            ptr->~T();
            deallocate(p);
            OSCL_UNUSED_ARG(ptr); // removes warning on some compilers
        }
    private:
        OsclMemAllocator alloc;
};

/** \class OsclMemBasicAllocDestructDealloc
** An OsclAllocDestructDealloc class that uses
** OsclMemBasicAllocator.
*/
template <class T> class OsclMemBasicAllocDestructDealloc : public OsclAllocDestructDealloc
{
    public:
        OsclAny* allocate(const uint32 size)
        {
#if(OSCL_BYPASS_MEMMGT)
            return alloc.allocate(size);
#else
            return alloc.allocate_fl(size, NULL, 0);
#endif
        }
        void deallocate(OsclAny* p)
        {
            alloc.deallocate(p);
        }
        void destruct_and_dealloc(OsclAny* p)
        {
            T* ptr = reinterpret_cast<T*>(p);
            ptr->~T();
            deallocate(p);
            OSCL_UNUSED_ARG(ptr); // removes warning on some compilers
        }
    private:
        OsclMemBasicAllocator alloc;
};

/**
 * This class is used to get a pointer to the global audit object.
 */

class OsclMemAudit;
class OsclMemGlobalAuditObject
{
    public:
        typedef OsclMemAudit audit_type;
        /**
         * returns the global audit object.  For use
         * in macros only-- not a public API.
         */
        OSCL_IMPORT_REF static audit_type* getGlobalMemAuditObject();

    private:
        /**
         * creates the global audit object
         */
        static void createGlobalMemAuditObject();

        /**
         * deletes the global audit object
         */
        static void deleteGlobalMemAuditObject();

        friend class OsclMem;
};

/**
* HeapBase is the base class for all classes that allocates memory.
*
* HeapBase has overloaded new and delete operators.
*
* Derived from _OsclHeapBase providing CBase* alike pointer and virtual destructor for cleanupstack
* to Push and Pop for cleanup when leave occurs.
*
* HeapBase has a virtual destructor which calls the destructor of all the derived classes.
*/

class HeapBase : public _OsclHeapBase
{
    public:
#if (OSCL_HAS_HEAP_BASE_SUPPORT)

#if(!OSCL_BYPASS_MEMMGT)
        static void* operator new(size_t aSize, const char *aFile = NULL, const int aLine = 0)
        {
#if(PVMEM_INST_LEVEL>0)
            //in case NULL is passed in, record this file & line #
            if (!aFile)
                return _oscl_default_audit_new(aSize, __FILE__, __LINE__);
#endif
            return _oscl_default_audit_new(aSize, aFile, aLine);
        }
#else
        static void* operator new(size_t aSize)
        {
            return _oscl_default_new(aSize);
        }
#endif

        static void* operator new[](size_t aSize)
        {
#if(!OSCL_BYPASS_MEMMGT)
            return _oscl_default_audit_new(aSize);
#else
            return _oscl_default_new(aSize);
#endif
        }

        static void* operator new[](size_t aSize, const char *aFile = NULL, const int aLine = 0)
        {
#if(!OSCL_BYPASS_MEMMGT)
#if(PVMEM_INST_LEVEL>0)
            //in case NULL is passed in, record this file & line #
            if (!aFile)
                return _oscl_default_audit_new(aSize, __FILE__, __LINE__);
#endif
            return _oscl_default_audit_new(aSize, aFile, aLine);
#else
            OSCL_UNUSED_ARG(aFile);
            OSCL_UNUSED_ARG(aLine);
            return _oscl_default_new(aSize);
#endif
        }

        static void* operator new(size_t aSize, void *aPtr)
        {
            return aPtr;
        }

        static void operator delete(void* aPtr)
        {
#if(!OSCL_BYPASS_MEMMGT)
            _oscl_audit_free(aPtr);
#else
            _oscl_free(aPtr);
#endif
        }

        static void operator delete[](void* aPtr)
        {
#if(!OSCL_BYPASS_MEMMGT)
            _oscl_audit_free(aPtr);
#else
            _oscl_free(aPtr);
#endif
        }
#endif //OSCL_HAS_HEAP_BASE_SUPPORT
        HeapBase() {};
        virtual ~HeapBase() {};
};

/** Internal-use macro to catch leaves
*in constructors.  If the constructor leaves,
*this will free the memory
*before allowing the leave to propagate to the next
*level.  It is the constructor's responsibility to
*cleanup any memory in the partially constructed
*object before leaving.  This cleanup may include
*cleaning up the base class using the OSCL_CLEANUP_BASE_CLASS
*macro.
*
* @param exp: expression to allocate memory.
* @param Tptr:variable to hold result.
* @param T: type
* @param params: constructor arg list
* @param freeFunc: delete or free function.
*/
#define _OSCL_TRAP_NEW(exp,freeFunc,T_ptr,T,params)\
{\
    int32 __err;\
    OsclAny*__ptr=exp;\
    OSCL_TRY(__err,T_ptr=new(__ptr) T params;);\
    if(__err){\
        freeFunc(__ptr);\
        T_ptr=NULL;\
        OsclError::Leave(__err);\
    }\
}

/**
 * This macro is used to cleanup the
 * base class in a derived-class constructor
 * just before a leave occurs.
 *
 * @param T: base class name.
 */
#ifdef PVERROR_IMP_CPP_EXCEPTIONS
//when using C++ exceptions, base class cleanup is automatic
#define _OSCL_CLEANUP_BASE_CLASS(T)
#else
//otherwise the destructor needs to be called explicitly.
#define _OSCL_CLEANUP_BASE_CLASS(T) this->T::~T()
#endif

/*! @} */

#if (!OSCL_DISABLE_INLINES)
#include "oscl_mem.inl"
#endif

#endif // OSCL_MEM_H_INCLUDED

/*! @} */

redpajama_set_name: RedPajamaGithub


text:
Toronto Raptors vs Philadelphia 76ers
Monday night, the Philadelphia 76ers will play against the Toronto Raptors at Wells Fargo Center in Game 5 of their series. The Sixers are leading 3-1 in this series and they open as 8-point favourites. The over/under for this match is set at 210.
Toronto Raptors Last Game Stats
The Raptors won Game 4, 110-102, to avoid a sweep and keep their NBA Finals hopes alive. Toronto ended the game with a 42.0 percent field goal percentage (37 of 88), making 8 of its 34 3s. The Raptors converted 28 of 35 charity opportunities for an 80% success rate. They grabbed 46 rebounds, 13 of which were offensive. In addition to that, they recorded 19 assists and five turnovers. They also had 9 steals. Toronto has allowed its opponent to shoot 42.5 percent from the field on 34 of 80 attempts in this game.
Philadelphia 76ers Last Game Stats
The Sixers had a total of 41 dime and 24 shots in the game. In addition, the team grabbed 35 boards (6 offensive, 29 defensive) and blocked 6 shots. Philadelphia finished 84 percent from the charity stripe, converting 21 of 25 shots. They made 13 of their 31 three-point attempts. The Raptors had 20 personal fouls, while the Sixers had 15. Pascal Siakam was a factor in this clash. He scored 34 points on 10 of 19 shooting, which helped his team win. He was on the court for 44 minutes and grabbed 8 rebounds. Siakam went 52.6 percent from the field and had 5 assists.
Toronto Raptors Season 21/22
Toronto enters this contest with a 48-34 record. They lose the ball over 12.5 times per game, and as a unit, they commit 19.6 fouls per game. Raptors as a team are grabbing 45.3 boards per game and having 1,809 assists this season, putting them 29th in the NBA in terms of passing. The Toronto Raptors are hitting 34.9 percent of their tries from downtown (979 out of 2,808), and 75.9% from the free-throw line. They're scoring 109.4 points per game (20th in the league) while shooting 44.5%. On the defensive end, Toronto allows 15.8 steals per game and draws 19.1 fouls. They're currently ranked 20th in assists allowed, having given up 2,076 this season. Toronto's defense has allowed a 46.2 percent shooting clip (3,197 of 6,919) and gives up 44.0 rebounds per game as a team.
They give up 35.4% of their long-distance shots and are ranked 7th in the NBA in opponents points per game (107.1). In terms of rebounding, Philadelphia gave up 33 to Toronto in Game 4 (13 offensive). They shot 8 for 34 and finished the game at 28 of 35 from the free-throw line (80.0 percent) to finish this game with a 23.5 percent 3-point success rate. The Sixers let the Raptors shoot 42 percent from the field, allowing them to make 37 out of 88 shots. The 76ers went 34 for 80 from the field, which had a shooting percentage of 42.5 percent. With regards to shooting from downtown, the Philadelphia 76ers made 13 of their 31 attempts (41.9 percent). They were able to sink 21 of the free throws for a success rate of 84%.
Go and check out our recommended sportsbooks for Canada and their welcome bonuses if you believe in your team.
Will Harden Be the Key Player for 76ers?
The 76ers committed 11 personal fouls during the game, which resulted in 25 free-throw attempts for Toronto. The 76ers also coughed up the ball 15 times and had 4 steals in this game. The Sixers picked up 35 defensive rebounds, 6 offensive rebounds, and 41 total rebounds in the game. For the game, James Harden converted 5 of 17 field goal attempts for a 29.4 percent success rate and 5 rebounds in the game. He had 22 points, 9 assists, and 4 steals in 42 minutes of action. The Philadelphia 76ers have a record of 51-31 this season. The Sixers are shooting 46.6 percent from the field, which puts them 16th in the NBA.
The Sixers have scored 9,015 points this season (109.9 per game), while they collect 42.3 rebounds per game. They have a 23.7 assist rate (21st in the league), and they are losing the ball 12.5 times each game. The 76ers commit an average of 19.4 fouls per game and connect on 82.1 percent of their free throws, according to the official NBA stats. The Sixers' defense gives up 34.6 percent from behind the arc (931 of 2,692) and opposing teams make 76.9 percent of their attempts from the free throw line. They surrender 23.6 assists and 44.2 total boards per game, which has them ranked 7th and 17th in the NBA. The Sixers are 9th in the NBA in points allowed per game with 107.3. They average 13.3 TOs a game and have given up 45.8 percent shooting (15th in the league).
Prisha Sevad
Prisha is our SEO and content guru at iBet Network. She keeps everyone else on track and makes sure that all our meta descriptions are up to scratch. Prisha is also very passionate about all things gambling and is a walking encyclopedia of casino slots and sports information.
Prisha has helped set up countless online casino and sports betting sites and has worked for a few major players in the industry.
More from Prisha Sevad


Painting Size: 16x24inchx3pcs(40*60cm*3)A perfect wall decoration for living room and bed room.Actual painting may be slightly different from the product image due to the different brand of monitors,Please refer to the colors shown in the photoPacked in Carton Box.satisfied guarantee. Buy with confidence! Gift card and wrap are available upon requestHigh Definition art work,printed on high quality canvas,a great gift idea for your relatives and friends.
High Definition Art Work print on canvas with vivid color on thick high quality canvas to create the look and feel of the original nature and masterpiece. The side margins are also printed to create a particularly decorative effect. Canvas Wall Art and Canvas Paintings are the modern way to brighten the walls of your home, and relax you after work. It is sure to captivate wherever it is hung. VV Art is one of the largest online suppliers for modern canvas wall art, including 100% hand-painted oil paintings on canvas, photo to portrait painting, photo to canvas print, canvas prints. Our wall decor category provides high quality yet affordable canvas art. We stock thousands of magnificent oil paintings and beautiful canvas prints to satisfy all of your fine art needs. Whether you are looking for a Van Gogh paintings reproduction, abstract paintings, landscape paintings, or high definition picture print on canvas, you will find it at VV WALLART.


The chakras are the energy centres of the body. By aligning and harmonising these, huge shifts and deep healing can occur in all areas of life. is located near the bottom of our throat, in between the collar bones. It governs our communication and self-expression, as well as our thyroid, throat, upper lungs and arms.
This essence holds the energy of vibrational essences of crystals of Blue Apatite, Yellow Apatite, Aquamarine, Lapis Lazuli, Iolite, & Quartz, which have been programmed with the highest vibrations and empowered in the light of the solstice sun and the full moon. It is aromatherapeutic, as it has been combined with Camomile hydrolat & Camomile essential oil*, along with alcohol to preserve the vibrations, and purified and infused water.
Wear, or surround yourself with the colour of this chakra - blue!


Dr. Salma Kafeel Qureshi is a Fertility Specialist from Islamabad Dr. Salma Kafeel Qureshi is a certified Fertility Specialist and his qualification is MBBS. Dr. Salma Kafeel Qureshi is a well-reputed Fertility Specialist in Islamabad. Dr. Salma Kafeel Qureshi is affiliated with different hospitals and you can find his affiliation with these hospitals here.
Dr. Salma Kafeel Qureshi Address and Contacts. Dr. Salma Kafeel Qureshi is a Fertility Specialist based in Islamabad. Dr. Salma Kafeel Qureshi phone number is +92-51-2655512-13 and she is sitting at a private Hospital in different timeframes.
Dr. Salma Kafeel Qureshi is one of the most patient-friendly Fertility Specialist and his appointment fee is around Rs. 500 to 1000. You can find Dr. Salma Kafeel Qureshi in different hospitals from 12 to 8 pm. You can find the complete list and information about Dr. Salma Kafeel Qureshi's timings, clinics, and hospitals.
If you are looking for a Fertility Specialist in Islamabad then you can try Dr. Salma Kafeel Qureshi as a Fertility Specialist You can find the patient reviews and public opinions about Dr. Salma Kafeel Qureshi here. You can also compare Dr. Salma Kafeel Qureshi with other Fertility Specialists here with the compare button above.


Just when you finally think you have a firm grasp of what Millennials want from their jobs, it's time to learn about Generation Z. This generation starts in 1995, which means they are now entering the workforce in droves. While they are similar to Millennials in some regards, they are quite different in others. Here's what you need to know in order to appeal to the newest additions to the workforce.
"Stay open to change and stay curious. We can all learn from each other and teach each other so much! Disruption is around us everywhere and its exciting as long as you land on the top of the pile!" Says Sharon Tsao, CMO, Contemporary Staffing Solutions.
Generation Z is arguably the most tech-savvy of any generation that has ever entered the workforce, but that savvy cuts two ways. They have grown up in an era of corporate hacks, data exposure and data misuse by large corporations and they do not trust websites that want personal data. Online job applications that ask for a host of personal information like a social security number will be abandoned by the younger generation. Some personal information is necessary in order to process applications and run background checks, but it is possible to collect that information later in the process.
If you thought Millennials thrived on feedback, wait until you meet Generation Z. Like Millennials, they expect ongoing feedback about their performance, but they also expect you to accept their feedback about how you're doing. Generation Z won't hesitate to speak up and share their feelings – whether you ask them to or not. This might seem gruff, forward or even rude, but it's simply the way they grew up. They believe their feelings and opinions should matter, and they want to be heard.
Generation Z is the most ethnically diverse generation in US history. They grew up exposed to people of all backgrounds and experiences, and they want to work for companies whose populations reflect the real world. They are savvy enough to spot diversity lip service when they see it. They will pay close attention to the actual diversity of your organization – especially among leadership – as they evaluate potential offers.
Generation Z expects to get paid – and those expectations are slightly out of line for most professions. A $50,000 starting salary is commonplace in some fields like tech, finance and medicine. However, most entry-level jobs pay far less. If you want to attract Generation Z, consider highlighting things like your benefits packages, perks and job flexibility to make up for the inability to pay them an exorbitant salary.
Are You Looking To Hire The Next Generation of Talent?
If you are looking for more ways to attract Generation Z talent, contact the recruiting experts at CSS today to learn more about how we can help you achieve your recruiting goals.


text:
#ifndef BOOST_CONTRACT_DESTRUCTOR_HPP_
#define BOOST_CONTRACT_DESTRUCTOR_HPP_

// Copyright (C) 2008-2018 Lorenzo Caminiti
// Distributed under the Boost Software License, Version 1.0 (see accompanying
// file LICENSE_1_0.txt or a copy at http://www.boost.org/LICENSE_1_0.txt).
// See: http://www.boost.org/doc/libs/release/libs/contract/doc/html/index.html

/** @file
Program contracts for destructors.
*/

#include <boost/contract/core/config.hpp>
#include <boost/contract/core/specify.hpp>
#include <boost/contract/core/access.hpp>
#if     !defined(BOOST_CONTRACT_NO_DESTRUCTORS) || \
        !defined(BOOST_CONTRACT_NO_PRECONDITIONS) || \
         defined(BOOST_CONTRACT_STATIC_LINK)
    #include <boost/contract/detail/operation/destructor.hpp>
#endif

namespace boost { namespace contract {

/**
Program contracts for destructors.

This is used to specify postconditions, exception guarantees, old value copies
at body, and check class invariants for destructors (destructors cannot have
preconditions, see
@RefSect{contract_programming_overview.destructor_calls, Destructor Calls}):

@code
class u {
    friend class boost::contract::access;

    void invariant() const { // Optional (as for static and volatile).
        BOOST_CONTRACT_ASSERT(...);
        ...
    }

public:
    ~u() {
        boost::contract::old_ptr<old_type> old_var;
        boost::contract::check c = boost::contract::destructor(this)
            // No `.precondition` (destructors have no preconditions).
            .old([&] { // Optional.
                old_var = BOOST_CONTRACT_OLDOF(old_expr);
                ...
            })
            .postcondition([&] { // Optional.
                BOOST_CONTRACT_ASSERT(...);
                ...
            })
            .except([&] { // Optional.
                BOOST_CONTRACT_ASSERT(...);
                ...
            })
        ;

        ... // Destructor body.
    }

    ...
};
@endcode

For optimization, this can be omitted for destructors that do not have
postconditions and exception guarantees, within classes that have no invariants.

@see @RefSect{tutorial.destructors, Destructors}

@param obj  The object @c this from the scope of the enclosing destructor
            declaring the contract.
            (Destructors check all class invariants, including static and
            volatile invariants, see @RefSect{tutorial.class_invariants,
            Class Invariants} and
            @RefSect{extras.volatile_public_functions,
            Volatile Public Functions}).

@tparam Class   The type of the class containing the destructor declaring the
                contract.
                (Usually this template parameter is automatically deduced by C++
                and it does not need to be explicitly specified by programmers.)

@return The result of this function must be assigned to a variable of type
        @RefClass{boost::contract::check} declared explicitly (i.e., without
        using C++11 @c auto declarations) and locally just before the code of
        the destructor body (otherwise this library will generate a run-time
        error, see @RefMacro{BOOST_CONTRACT_ON_MISSING_CHECK_DECL}).
*/
template<class Class>
specify_old_postcondition_except<> destructor(Class* obj) {
    // Must #if also on ..._PRECONDITIONS here because specify_... is generic.
    #if     !defined(BOOST_CONTRACT_NO_DESTRUCTORS) || \
            !defined(BOOST_CONTRACT_NO_PRECONDITIONS) || \
             defined(BOOST_CONTRACT_STATIC_LINK)
        return specify_old_postcondition_except<>(
                new boost::contract::detail::destructor<Class>(obj));
    #else
        return specify_old_postcondition_except<>();
    #endif
}

} } // namespace

#endif // #include guard


text:
Frida The Dog Was Mayor Of San Francisco For A Day & It Was Heart-Stoppingly Adorable — PHOTOS
By Alicia Lu
Sometimes, the person in power needn't come from a long pedigree of politicians, tycoons, or even humans. In fact, San Francisco's latest mayor is a dog and her pedigree is unknown, but that doesn't mean she can't fulfill her mayoral duties like the best of them. Yes, really: Frida, a Chihuahua-mix, was mayor of San Francisco for a day on Tuesday. Her appointment was part of a campaign to raise awareness for the city's publicly funded animal shelter, Department of Animal Care and Control, and she was chosen after her owner entered a winning bid to beat out other canine hopefuls.
As mayor, Frida attended a meeting with the Board of Supervisors at San Francisco's City Hall, where San Francisco's human mayor, Ed Lee, paid tribute to her in his opening remarks and Supervisor Scott Wiener read her a commendation for service. Because she was such an important city official, Frida got to tour the city's famous landmarks, presumably given plenty of treats along the way. The rescue dog ran on a nonpartisan platform that included mandatory belly rubs, something every dog supporter — and most human supporters — can get behind.
Frida concluded her official term in office with a press conference on the steps of City Hall. She was presented with a retirement package that included a doggy bed, play toys, and a gift basket to thank her for her service.
Frida's overall message as mayor was that rescue dogs make great pets. She would know — she's a rescue dog herself. Frida was adopted by Dean Clark at the SPCA and has been advocating for rescue dogs as the mascot for adoption initiative For the Love of Dog USA. A mother of two, Frida is proof that with hard work, anyone — human or dog — can achieve their dreams. Miriam Saez, acting director of the Department of Animal Care and Control, told the Guardian:
We applaud Mayor Frida's ability to rise above her humble start as a single mom in an animal shelter to Mayor for the Day.
Having a dog mayor for a day wasn't the first time the city of San Francisco rallied together to make someone's dream come true. Last November, the city transformed into Gotham for a day so that 5-year-old Miles could realize his dream of being Batkid through the Make-A-Wish Foundation. Thousands of citizens lined the streets to play along as Miles, along with an adult Batman, rescued a damsel in distress, thwarted a bank robbery in progress, and helped indict mega villains the Penguin and the Riddler along with the SF office for the U.S. attorney and the FBI, who had both joined in on the game. Miles then received a (chocolate) key to the city from Mayor Ed Lee.
San Francisco might be the best city ever. (Other cities, take note!)
Images: For the Love of Dog/Facebook


text:
"use strict";
var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
Object.defineProperty(exports, "__esModule", { value: true });
var is_1 = require("@riim/is");
var map_set_polyfill_1 = require("@riim/map-set-polyfill");
var mixin_1 = require("@riim/mixin");
var symbol_polyfill_1 = require("@riim/symbol-polyfill");
var EventEmitter_1 = require("../EventEmitter");
var FreezableCollection_1 = require("./FreezableCollection");
var ObservableCollection_1 = require("./ObservableCollection");
var ObservableMap = /** @class */ (function (_super) {
    __extends(ObservableMap, _super);
    function ObservableMap(entries, opts) {
        var _this = _super.call(this) || this;
        _this._entries = new map_set_polyfill_1.Map();
        FreezableCollection_1.FreezableCollection.call(_this);
        ObservableCollection_1.ObservableCollection.call(_this);
        if (typeof opts == 'boolean') {
            opts = { adoptsValueChanges: opts };
        }
        _this._adoptsValueChanges = !!(opts && opts.adoptsValueChanges);
        if (entries) {
            var mapEntries_1 = _this._entries;
            if (entries instanceof map_set_polyfill_1.Map || entries instanceof ObservableMap) {
                (entries instanceof map_set_polyfill_1.Map ? entries : entries._entries).forEach(function (value, key) {
                    mapEntries_1.set(key, this._registerValue(value));
                }, _this);
            }
            else if (Array.isArray(entries)) {
                for (var i = 0, l = entries.length; i < l; i++) {
                    mapEntries_1.set(entries[i][0], _this._registerValue(entries[i][1]));
                }
            }
            else {
                for (var key in entries) {
                    mapEntries_1.set(key, _this._registerValue(entries[key]));
                }
            }
            _this._size = mapEntries_1.size;
        }
        else {
            _this._size = 0;
        }
        return _this;
    }
    Object.defineProperty(ObservableMap.prototype, "size", {
        get: function () {
            return this._size;
        },
        enumerable: true,
        configurable: true
    });
    ObservableMap.prototype.has = function (key) {
        return this._entries.has(key);
    };
    ObservableMap.prototype.contains = function (value) {
        return this._valueCounts.has(value);
    };
    ObservableMap.prototype.get = function (key) {
        return this._entries.get(key);
    };
    ObservableMap.prototype.set = function (key, value) {
        var entries = this._entries;
        var hasKey = entries.has(key);
        var oldValue;
        if (hasKey) {
            oldValue = entries.get(key);
            if (is_1.is(value, oldValue)) {
                return this;
            }
            this._throwIfFrozen();
            this._unregisterValue(oldValue);
        }
        else {
            this._throwIfFrozen();
        }
        entries.set(key, this._registerValue(value));
        if (!hasKey) {
            this._size++;
        }
        this.emit('change', {
            subtype: hasKey ? 'update' : 'add',
            key: key,
            oldValue: oldValue,
            value: value
        });
        return this;
    };
    ObservableMap.prototype.delete = function (key) {
        var entries = this._entries;
        if (!entries.has(key)) {
            return false;
        }
        this._throwIfFrozen();
        var value = entries.get(key);
        this._unregisterValue(value);
        entries.delete(key);
        this._size--;
        this.emit('change', {
            subtype: 'delete',
            key: key,
            value: value
        });
        return true;
    };
    ObservableMap.prototype.clear = function () {
        if (!this._size) {
            return this;
        }
        this._throwIfFrozen();
        if (this._adoptsValueChanges) {
            this._valueCounts.forEach(function (valueCount, value) {
                if (value instanceof EventEmitter_1.EventEmitter) {
                    value.off('change', this._onItemChange, this);
                }
            }, this);
        }
        this._entries.clear();
        this._valueCounts.clear();
        this._size = 0;
        this.emit('change', {
            subtype: 'clear'
        });
        return this;
    };
    ObservableMap.prototype.forEach = function (callback, context) {
        this._entries.forEach(function (value, key) {
            callback.call(context, value, key, this);
        }, this);
    };
    ObservableMap.prototype.keys = function () {
        return this._entries.keys();
    };
    ObservableMap.prototype.values = function () {
        return this._entries.values();
    };
    ObservableMap.prototype.entries = function () {
        return this._entries.entries();
    };
    ObservableMap.prototype.clone = function () {
        return new this.constructor(this, this._adoptsValueChanges);
    };
    Object.defineProperty(ObservableMap.prototype, "isFrozen", {
        get: function () {
            return false;
        },
        enumerable: true,
        configurable: true
    });
    ObservableMap.prototype.freeze = function () {
        return this;
    };
    ObservableMap.prototype.unfreeze = function () {
        return this;
    };
    ObservableMap.prototype._throwIfFrozen = function (msg) { };
    Object.defineProperty(ObservableMap.prototype, "adoptsValueChanges", {
        get: function () {
            return false;
        },
        enumerable: true,
        configurable: true
    });
    ObservableMap.prototype._onItemChange = function (evt) { };
    ObservableMap.prototype._registerValue = function (value) { };
    ObservableMap.prototype._unregisterValue = function (value) { };
    return ObservableMap;
}(EventEmitter_1.EventEmitter));
exports.ObservableMap = ObservableMap;
mixin_1.mixin(ObservableMap.prototype, FreezableCollection_1.FreezableCollection.prototype, ['constructor']);
mixin_1.mixin(ObservableMap.prototype, ObservableCollection_1.ObservableCollection.prototype, ['constructor']);
ObservableMap.prototype[symbol_polyfill_1.Symbol.iterator] = ObservableMap.prototype.entries;


text:
HRAS: How to remain resilient after a traumatic event
The Human Rights At Sea campaign published a guide for shippers, addressing the issue of handling and remaining resilient after traumatic events at sea, such as marine incidents. The campaign aims to urge shippers to ask for professional help when they feel they need it, highlighting that this does not imply any instability or weakness.
Maritime Health | 09/05/17
The paper explains that the traumatic events may interfere with seafarers' ability to function correctly or bring them strong emotional and physical reactions. The symptoms may last weeks, months and even longer. The help needed may comes from family and friends, but occasionally professional help may be necessary.
Authored by Professor Neil Greenberg of March on Stress, on behalf of Human Rights at Sea, the leaflet follows on from the 'Managing Traumatic Stress' guidance that was previously published.
The leaflet has been sponsored by Seafarers UK through its grant to the charity, and it is supported and to be disseminated by The Fishermen's Mission, the National Federation of Fisheries Organisations, the Apostleship of the Sea, Thomas Miller P&I (Europe) Ltd and the Sailors Society
For the seafarer
Spend time with friends, family and people you trust
Re-occurring thoughts, dreams and flashbacks are normal-don't try to fight them, as they will decrease over time
Maintain as normal routine as possible
Eat well-balanced and regular meals
Try to keep a reasonable level of activity
Fight against boredom
Express your feelings as they arise to people you trust
But remember, you don't have to tell everyone everything
Spend time with the person
Offer your assistance and a listening ear, even if they have not asked for help
Help them with every day routine tasks
Allow them some private time
Don't take their anger or feelings personally
Don't tell them that they are "lucky it wasn't worse" or "you will get over it"
Instead tell them that you want to understand and assist them as and when they would like you to
The campaign informs that the Fishermen's Mission provides UK wide support through their network of welfare personnel. Another source of help is the port chaplain, to whom seafarers can speak in the utmost confidence.
Further details may be found in the following leaflet:
Tags: maritime health reports resilience seafarer's rights wellness at sea
Guidance published to facilitate container tracking
New paper discusses hydrogen in electricity value chain
Watch: Rating seafarers' life at sea
Underwater noise from ships stresses mussels, study shows
India addresses Indian seafarers' human rights at sea


text:
{% extends 'nova/base.html' %}
{% load i18n %}
{% block title %}Network Details{% endblock %}

{% block page_header %}
  {% url horizon:nova:networks:ports:list as refresh_link %}
  {# to make searchable false, just remove it from the include statement #}
  {% include "horizon/common/_page_header.html" with title=_("Network Details") refresh_link=refresh_link searchable="true" %}
{% endblock page_header %}

{% block dash_main %}
  {{ ports_table.render }}
{% endblock %}


Teresa (Hefner) Pinsonneault, a life-long Southbridge resident, died Thursday, February 25, 2010 at the UMASS Memorial Medical Center, University Campus, following a brief illness. She was the wife of the late Richard G. Pinsonneault, who died in 1995.
She is survived by two sisters: Pauline Hefner of Longmeadow, and Ruth Lamarre and her husband Gilbert of Kennebunkport, ME; nieces; nephews; grand-nieces; grand-nephews; and many loyal, caring friends and neighbors. She was also the sister of the late Bernard Hefner.
She was born in Southbridge, and was the eldest daughter of the late Charles and Alexandrina (Proulx) Hefner.
A life-long member of St. Mary's Church, she was educated in parish schools. She was employed by the American Optical Company as a prescription translator for 49 years, retiring in 1984. She also volunteered for many years for the Harrington Hospital Auxiliary.
Her funeral will be held on Monday, March 1, 2010, from the Daniel T. Morrill Funeral Home, 130 Hamilton St., Southbridge, with a Mass at 10:00AM in St. Mary's Church, 263 Hamilton St., Southbridge. Burial will be in New Notre Dame Cemetery, Southbridge. Calling hours at the funeral home will be held on Sunday, February 28th, from 3:00 to 5:00pm.
Memorial donations may be made to St. Mary's Church Building Fund, 263 Hamilton St., Southbridge, MA 01550 or to the Habitat for Humanity International, 121 Habitat Street, Americus, GA 31709.


The Follower Book Bundle is a great way to equip your students with two incredible resources. See Previews Below!
The Follower Book Bundle is a great way to equip your students with the basics for your event weekend. Includes: Student Book, Follow-up Journal.


Dr. Scott Shreeve at Crossover Health, Senior Health Advisor at The X Prize Foundation has organized this blog rally to encourage participation in the Healthcare X Prize Foundation competition.
Blog Rally (b'lôg răl'ē) adj.
1. A coordinated, simultaneous presentation of identical or similar material on numerous blogs for the purpose of engaging large numbers of readers and/or persuading them to adopt a certain position or take a certain action.
2. The simultaneous nature of a blog rally can create the result of joining the efforts of otherwise independent bloggers for an agreed-upon purpose.
2. Share you comments regarding the prize concept, the measurement framework, and the likelihood of this prize to impact health and health care reform.
We hope this blog rally amplifies our efforts to solicit feedback from every source possible as we understand that innovation does not always have a corporate address. We hope your engagement starts a viral movement of interest driven by individual people who realize their voice can and must be included. Let's ensure that all of us – and the people we love – can have a health system that aligns health finance, care delivery, and individual incentives in a way that optimizes individual vitality and community health. Together, we can ensure the best ideas are able to come forward in a transparent competition designed to accelerate health innovation. We look forward to your participation.


text:
Patenting inventions
Registered trade marks
Commercial initiatives
IP Disputes
Formalities services
Mechanical & electrical engineering
FAQ - Patents
FAQ - Registered designs
FAQ - Trade marks
A UK Doctrine of Equivalents?
The UK Supreme Court recently decided (1) to modify the way patent claims should be interpreted for deciding on infringement. In doing so, they appear to have harmonised the UK approach slightly more with that of other European countries and the USA. Some commentators have also noted that the decision shifts the legal test slightly more in favour of patent owners.
Different jurisdictions have taken different positions for interpreting claims, between slavishly applying the literal meaning of words at one extreme, and treating the claims merely as a guideline at the opposite extreme. The traditional UK approach is considered to be closer to a word-based interpretation, and although the purpose, or function, of a claimed feature may be taken into account, the UK Courts have been reluctant to stray too far from the actual words used in a claim. In addition, they have avoided referring to what the applicant said to the IP Office during the patent grant process, the 'prosecution history', in contrast to the US approach.
While the basic question applied by UK Courts has been: "what would the skilled person have understood the patentee to mean?", the so-called 'Improver' questions have been used to decide whether a claim is infringed. In Actavis v Lilly (2017), the Supreme Court held that a claim was infringed by a product comprising a chemical compound variant outside the literal scope of the claim, regarding the variant as being equivalent to the one claimed (i.e., pemetrexed disodium). In doing so, the Court felt it necessary to modify the Improver questions to read as follows:
Notwithstanding that it is not within the literal meaning of the relevant claim(s) of the patent, does the variant achieve substantially the same result in substantially the same way as the invention? i.e. the inventive concept revealed by the patent?
Would it have been obvious to the person skilled in the art, reading the patent at the priority date, but knowing that the variant achieves substantially the same result as the invention, that is does so in substantially the same way as the invention?
Would such a reader of the patent have concluded that the patentee nonetheless intended strict compliance with the literal meaning of the relevant claim(s) of the patent was an essential requirement of the invention?
If the first two questions are answered "yes" and the third question is answered "no", then the claim is infringed.
The Court also appeared to open the door to taking the prosecution history file into account for interpreting the claims, in certain circumstances. In particular, reference to the prosecution file may be appropriate where a) the claims, description and drawings were not sufficient to clarify an important point at issue, and the prosecution file would unambiguously resolve the point, or b) it would be contrary to the public interest to ignore the prosecution file. However, the Court stated that a skeptical approach should be adopted towards using the prosecution history to interpret claims.
While these modifications to assessing infringement in the UK may be rather small, and impact of this decision remains to be seen, greater international harmonization of the approach is surely welcome.
(1) Actavis UK Limited and others v Eli Lilly and Company ([2017] UKSC 48)
Mathisen & Macara
Communications House, South Street, Staines-Upon-Thames TW18 4PR United Kingdom
Tel: +44 (0)1784 772220 || Fax: +44 (0)1932 325326 Email: mail@mathisen.co.uk
Mathisen & Macara is a trading style of Mathisen & Macara LLP which is registered in England under No. OC362392.
Members: J P H Smith || M C Foster || A King || S Stevens || C Gravenell
©2016 Mathisen & Macara. All rights reserved. || Cookie Policy || Website designed by Orckid.


text:
Medical News and Health News Blog
UK To Lead The Way With Picture Warnings On Tobacco Packets
August 31, 2007 July 5, 2018 RadheHealth-Medical
Graphic images illustrating the devastating effects that tobacco can have on health will be printed on all tobacco packets from next year Health Secretary Alan Johnson announced last day.
The 15 images to be used were chosen following a consultation in 2006, market research and a public vote. The move makes the UK the first country in the EU to introduce such visual warnings on all tobacco products aimed at raising awareness, helping smokers who want to quit and further reducing smoking related illnesses.
Alan Johnson said:
"Picture warnings are the next vital step in reducing the number of people who smoke. We are committed to continuing to drive down smoking rates in the UK as smoking remains the number one cause of ill health and early death.
"We have already made a lot of progress with stark written warnings on cigarette packs. Today's announcement, together with the introduction of the smokefree law last month and our plans to raise the legal age of sale for tobacco products will potentially save thousands of lives and others will be spared the misery of watching family and friends die prematurely from smoke related illnesses."
The Chief Medical Officer, Sir Liam Donaldson said:
"I am delighted that the UK is introducing picture warnings on tobacco packs. This will help promote better awareness of the damage that smoking does to lives and families, an essential step towards reducing the number of people who start smoking. It will also free significant NHS staff and facilities to treat other conditions that are harder to prevent".
Elspeth Lee, senior tobacco control manager at Cancer Research UK, said:
"Cancer Research UK welcomes the introduction of picture warnings on cigarette packets and we hope this is a step towards the plain, generic packing of all tobacco products. International evidence shows that graphic picture warnings lead to greater awareness of the risks associated with smoking and help encourage people to cut down or quit altogether."
During the consultation, for each message there was a choice of three pictures. The public and stakeholders were asked to register their view of the most effective warnings.
This announcement comes out of a commitment in the Choosing Health White Paper to introduce picture warnings on cigarette packs. The bank of images were developed by the European Commission in line with the 2001 Labelling Directive. This allowed member states to choose which images should be used and when they should be introduced.
The new warnings will appear on cigarette packets from Autumn 2008 and other tobacco products the following year.
People can view the chosen picture warnings from 11.40am on the web at: www.dh.gov.uk/tobaccopackwarnings
Health warnings on tobacco packets have long been a method for informing smokers of the health risks associated with smoking and current written health warnings on tobacco packs have been in place in the UK since 2003.
Developmental Psychology Section Annual Conference 2007, UK
RTX Healthcare Receives FDA 510k Market Clearance For Telehealth Monitor
support@medicalnewsblog.info
Use Purifying Toner to Reduce Dark Spots
The fascinating world of mesotherapy- a basic guide to understanding how it works
How to stimulate erogenous zones in your partner
Ways For Quick Deep Clean For Your Bathroom
Have A Boost of Multivitamin Everyday With A Daily Green Supplement Available At The Best Price
Child's Health
Health-Medical
Kumle by WP Charms


The TUDIA 2nd Gen USB-C to USB-A Cable is the cable you need to connect your PC or Mac to USB-C enabled portable devices, such as your Tablet or Smartphone. With the USB 3.1 Cable you can count on simple plug and play connectivity. Moving large files or transferring movies can be done in seconds, all while charging your device with up to 60 Watts (3 Amp) power delivery, where supported. The 3.3Ft length comes handy to place devices away from the connection point.
The connector has a rated durability of 10,000 uses, making it sufficiently robust for even the most demanding users. This premium cable is also backwards compatible with 2.0.
Instead of plastics or Polycarbonate sheathing, This TUDIA Premium USBC cable features a unique high tensile nylon construction. The nylon fiber cloth is wound tightly around the cord lending it superior durability and adding a bit to its flexibility. Nylon as a fabric happens to be waterproof with a high stress quotient so this TUDIA cable ought to last really long.
The TUDIA USBC to USBA Charge and Sync Cable is made with a durable aluminum molding plugs with enhanced strain relief. The stylish nylon cable will not fringe or cripple. The cable is design to easily connect to your device even with a protective case. It is tangle free for easy storage and use. At over 3 feet in length you can easily connect the cable to charge and sync while freely using your device. This high quality cable will charge and sync your device at full capacity.
Reversible Connector: With the latest and most advanced USBC connector you'll also be able to power other devices and never have to worry about plugging in upside down.