text:
exclusive BMW concept Z4 reveal at concours d'elegance in pebble beach
technology 0 shares connections: +460
POPULAR NOW TECH!
NASA abandons mars heat probe mission following unexpected soil conditions
technology 38k views
vaonis turns your mobile phone into an astronomy observation telescope
wally prioritizes luxurious living spaces in 88-foot long WHY200 yacht
the SONDORS metacycle is an affordable, good looking electric motorbike
kingston custom handcrafts BMW R18 into art deco-inspired custom motorcycle
on the occasion of the 2017 concours d'elegance at pebble beach, the BMW 'concept Z4' received its official world premier mere hours after the concept's design first surfaced online. dynamic, progressive and exuding in sophistication, the roadster combines emotionally appealing forms with unadulterated driving pleasure. designboom is at the exclusive event in california, where we spoke to adrian van hooydonk, senior vice president BMW group design.
the BMW 'concept Z4′ next to pebble beach golf links' famous 18th hole
image © designboom
in comparison to previous BMW 'Z' models, the concept's bonnet and overhangs are shortened, placing the driver and passenger in a more advanced seating position than before. defined by just a few precise lines, the muscular bodywork details flow from the shark nose at the front, along the flanks, to the elegant back. this distinguishes the car in a dynamic wedge shape that highlights the agility of the BMW 'Z4', as well as typical design cues of roadsters. furthemore, the surface's dramatic sculpture continues the automotive brand's new design language – first shown with the 'concept 8 series' in may, 2017 – which focuses on a more luxurious style.
Z4 editions next to one another
paired with this sophisticated styling, the BMW 'Z4 concept' adorns a matte paint finish in 'frozen energetic' orange, which subtly adds additional tones between the body's minimal lines. in unison to the exterior, the interior continues its direction and color scheme, with only a chrome trim strip providing separation between the two. a ying-yang split between black and orange partitions the driver's area from the passenger's. the cockpit reinforces the roadster's focus on the driving experience with an instrument panel and center stack that encompasses the driver. finished entirely in black in order to accentuate the orange highlights, the cluster and central information display helps to deliver an ergonomic 'cone of vision' so that the occupant can focus entirely on the road. they combine to communicate the right information at the right time, with route guidance, playlists or other infotainment features available at ease.
at the highly exclusive concours d'elegance at pebble beach, california, designboom were one of only a few international press present at the BMW 'concept Z4' debut. after the unveiling, we sat down with adrian van hooydonk, senior vice president BMW group design, who gave extra insight into the roadster's design.
designboom (DB): following BMW's new design language which was first presented with the 'concept 8 series', could you talk about some of elements of the 'concept Z4' that establishes its sophisticated style?
adrian van hooydonk (AVD): the sophistication in our mind comes from reduction. we have fewer and very crisp lines for the exterior, and reductions in the interior as well, with fewer knobs and buttons. the ones we do have are neatly grouped in a couple of islands. when your reduce, both in the exterior and interior, the way you execute the details become even more important. for the exterior, the one line we have on the side and on the front is a shut line for the clam shell bonnet. it then moves over the door to the rear fender to become the top of it. it is just one line overall but it is creating so much. the surfaces below and above it are twisting and turning. that is what we believe creates the emotion, with the highlighting of light and shadow in the side views as well. this is a quite sophisticated play in shapes, which is not so easy to do. we wanted to create a design that at first glance, you can remember and can easily understand. when you walk around and look closer, like wise when you have bought the car yourself, you will find more and more details and playful elements.
adrian van hooydonk, senior vice president BMW group design (left), and bernhard kuhnt, CEO of BMW of north america (right)
DB: what was the design process for the forms in between these few lines?
AVD: we never want to do flat surfacing. we actually check during the design phase for flat spots because we really do not want that. we want each surface to be curved and each line to have a tension. by creating more pure lines, we actually bring more surface into view.
DB: do you think the matte finish of the paint helps define these surfaces and lines?
AVD: the matte finish of the paint sort of flattens it a little bit, but each surface is carefully sculpted and has that desired tensions still. of course, we have looked at this concept's design in a shiny surface. you can see the difference with the 'concept 8 series' for when you make it shiny. it then reflects a lot more so, in turn, the design almost comes alive a bit more as it mirrors the whole outside world that much more. the matte absorbs this a little bit but does show the surface well, just without the reflection of the environment.
all images courtesy of BMW group unless stated otherwise
DB: the 'concept 8 series' was really intriguing to see the development of the BMW grille and the 'Z4 concept' takes this even further. what are the key details of the grille and how has it progressed from the previous BMWs?
AVD: there are a couple of similarities between the '8' and the 'Z4', and that is that the grille is very low and wide. actually, when you look at the outside of the grille, you will notice that it is turning down towards the road and is going around the lower point. it is a different expression, which makes these cars more dynamic. the two vehicles need to be different in character. the '8 series' is a luxury car so we gave it the slots and the shark nose-look. it also has the mesh which is similar but not exactly like the 'Z4'. we wanted to make the 'Z4' a little younger and more fresh if you will, and the mesh does so. this is a feature that you can find enriched in BMW's history, most often on our race cars.
DB: even though the 'Z4' presents a progression of the brand's new form language, which was first shown with the 'concept 8 series', what other main differences are there between the concepts' design
AVD: if you look at the lamps, there are big differences between the 'concept 8 series' and 'concept Z4'. in both cases we used LED and laser technology, and the lamps are cut off at the top and the bottom so that they are as low as possible. however for the 'Z4', we came up with this neat vertical arrangement, which makes this car more aggressive than the '8 series'.
full article here
As a Z4 (E85) owner I just love the look & details of this concept. I was asked all those years ago by the then BMW designers, just how wide the boot must be to fit a golf bag! The latest Z4 struggles to fit one as the metal roof robs too much space, so I never changed my Z. Tell me if this marvellous new model will do the job!! Congratulations!
colin briggs
livingspace on wheels: rethink design with the interior of the BMW iX
the monolith: rethink design with the exterior of the first-ever BMW iX
wayne mcgregor, random international and BMW i's performance empathically pairs human and machine
this is BMW's scooter of the future, the motorrad definition CE 04
designer brings the DeLorean DMC12 to 2021 prior to its 40th anniversary
TOP 10 concept cars of 2020
electric MINI Vision Urbanaut adapts to fit your moment of journey
CONCOURS D'ELEGANCE (18)
design between the lines: the future of BMW design at concours d'elegance 2019
top five rare classic cars from pebble beach concours d'elegance 2019
BMW revives marcello gandini's 1970s classic garmisch concept car at concorso d'eleganza
driving premiere of the mercedes-benz SSKL racing car at pebble beach
BYTON balances technological mobility with heritage at pebble beach
dakar rally 2021: REBELLION and designboom took part in the endurance race with two buggies
as the chequered flag waves, designboom looks back on the two-week-long, world's most extreme racing adventure – the dakar rally.
dakar 2021 (4)
timepiece design (307)
the SONDORS metacycle is equipped with a 4000 watt hour 72 volt battery that gives you the ability to roam free up to 80 miles.
electric motorcycle and scooter design (233)
mink is a tiny teardrop camper offering a warm cocoon
the mink 2.0 sports camper is a fully-equipped heated mini camper with an outdoor kitchen and a panorama roof.
yacht manufacturer designs fully-electric safari car with solar powered roof
both the mechanical and R&D teams at sunreef yachts worked on every aspect of the car to combine a knowledge of green tech with a passion for motorsports.
solar power (270)


text:
Dental India Tourism Home » Dental Tourism » Articles » Creepy Old School Dental Instruments
If you think the dentist's office is scary now, imagine how it was centuries ago when these dental tools were used…
Bow Drill (7000 BC)
The earliest known dental drills originated around 9,000 years ago in the Indus Valley area of present-day India and Pakistan. Dental bow drills were constructed much like bow drills used to create fire — with a stringed wooden bow tied to a rotating spindle — except that instead of using friction to make a fire, the spindle was used as a drill, with a flint head made to penetrate teeth. (The pictured example is an Eskimo drill from the early 20th century.)
Dental Pelican (1600s)
Dental pelicans, named because of their resemblance to a pelican's beak, were tooth extraction tools used from the 14th century through the late 18th century, when dental keys became more popular (see below). Examples like this French or Italian pelican consisted of a rotating claw mounted on a shaft in an adjustable slot. The tooth would be pinched between the claw and the head of the shaft and then pulled out.
Dental Forceps (1600s)
Dental forceps are used in grasping and extracting teeth — this 17th century Italian pair being more rudimentary than modern examples.
Wilcox-Jewett Obtunder (1905)
The Wilcox-Jewett Obtunder was a futuristic-looking device that used a periodontal syringe for the oral injection of anesthetic substances (typically cocaine).
Dental Key (1810s)
Dental keys, named because they were modeled after door keys, were used to extract teeth. The claw at the end of the shaft was designed to grasp the diseased tooth as the instrument was rotated to loosen the tooth — a crude method that often resulted in broken teeth, tissue damage and jaw fractures. By the turn of the 20th century, forceps had rendered dental keys obsolete.
Finger-Rotated Dental Drill (1870s)
This unusual six-inch-long drill was attached to a thimble that held it in place while the spindle was rotated by the dentist's finger at a rate much slower than other dental drills of the era, which used bow action, hand cranks, foot pedals and ultimately, electricity.
Oral Speculum (1600s)
A speculum is used to open a body cavity for investigation or medical procedures. This model of oral speculum worked like a reverse vise, with the screw prying open the patient's mouth for easy access.
Secateurs (1810s)
This French orthodontic device ("secateurs" being French for "cutters" or "scissors") treated an uneven or diseased tooth by locking on and wrenching out the entire tooth from just above the gum line.
Goat's Foot Elevator (1700s)
Another extraction tool, the goat's foot elevator — whose double-pointed tip resemble a goat's cleft hoof — was used in conjunction with other devices. Its major purpose was to aid in the clean-up of remnants of dental root and tooth fragments, since tools like pelicans frequently failed to remove the entire tooth and root. Its pointed design allowed it to be inserted into sockets to "elevate" dental tissue and other material. Sometimes it was even used to loosen a tooth before extraction by other means.
Dental Mouth Gag (1500s)
Dental mouth gags are used to keep patients' mouths open during procedures. This 16th century gag uses wing nuts to open and close the handles and lock them in place. It could have also been used to pry open the mouths of patients suffering from lockjaw.
Dental Screw Forceps (1850s)
These unusual American forceps contain a extendable screw that was held in place by the blades to ease in burrowing into the tooth's root during extraction.
Bone Chisels (1780s)
Unlike modern dental chisels, which are petite and used largely for cleaning purposes, antique dental chisels were large and used more as extraction devices, functioning much like traditional chisels to dig into the gum line to remove teeth.
Tongue Ecraseur (1850s)
A tongue écraseur was used to remove a diseased portion of the tongue in order to prevent the infection from spreading. The chain was looped over the infected portion and tightened using the ratchet, stopping the circulation of blood to the area.

redpajama_set_name: RedPajamaCommonCrawl


text:
Stop The War: "Not appropriate" to hear Syrians at meeting on Syria
UPDATE 10 Sept: The Stop The War event referred to in this post has been cancelled.
Syria Solidarity UK letter to Stop The War Coalition:
Dear Stop The War Coalition,
We understand you are aware of the open letter from Syrian activists involved in the Planet Syria campaign:
http://on.planetsyria.org/stop-the-war-coalition-please-include-a-syrian-on-your-panel-on-syria/
We are asking that you formally reply to the letter, and that you allow an activist of their choice to speak from the platform at the Stop The War Coalition meeting on 10th September.
Please respond ASAP to this message. We will be attending the meeting and will continue to raise this issue publicly if we do not receive a response from you.
Mark Boothroyd
Kellie Strom
Abdulaziz Almashi
Mario Hamad
Clara Connolly
Syria Solidarity Movement UK
Today's response from Stop The War Coalition:
Dear Syria Solidarity Movement,
Thank you for your letter. The meeting on Thursday is to oppose UK military intervention. Nothing on Planet Syria's website opposes such intervention, therefore an invitation to speak is not appropriate.
The meeting is not a debate between those for and against intervention. Such a debate might be appropriate at some time, but in that case it should be discussed and agreed.
You are of course welcome to attend the meeting but I hope that you will respect the parameters and conduct of the meeting.
Lindsey German
Stop the War Coalition
Below is the full text of Planet Syria's open letter to Stop The War Coalition:
'Stop the War' Excludes Syrians Stopping the War
It has come to our attention that you are hosting a panel on September 10 titled "Don't bomb Syria" to discuss why you are against anti-ISIS strikes by the UK in Syria. You say the strikes will only lead to resentment and "more deaths and destruction. [1] The panel will be attended by Diane Abbott MP, Seumas Milney and Andrew Murray. The Stop the War coalition is adamant that the best role the UK can play at this stage is to stay out of Syria completely. We understand why you are wary of getting involved in another war in the Middle East. We are grateful that people in the UK are giving this issue so much consideration. However, given that the Stop the War coalition's pronouncements on the situation in Syria hold sway among a great deal of the British public we, as nonviolent Syrian activists, urge you to consult us on this grave matter. It is our own lives you're discussing with such conviction after all and to that end, we believe it is necessary for a Syrian to participate on the panel.
To be clear, we are not taking a position for or against these strikes. The truth of the matter is, whether the UK intervenes to strike ISIS or not, it is not about to start or stop a new war in Syria. A brutal war has already been raging in Syria for the past four years and ISIS is but one of the parties wrecking Syrian lives every day. In fact ISIS has inflicted less casualties than the Syrian government, which has made a daily habit of launching air strikes on defenceless besieged towns. To date, the Syrian government has killed at least seven times more civilians than ISIS according to the Violations Documentation Centre and the Syrian Network for Human Rights, two reputable Syrian organisations. [2]
You claim that anti-ISIS strikes will increase terrorism but as activists working on the ground to build peace, we know very well that there are many factors driving the radicalisation of young hearts and minds in Syria. The main one by far is the crude and unsparing barrel bomb made of scrap metal and high explosives. Barrel bombs, which are cheap and easily manufactured, are dropped by government helicopters on a daily basis. They turn entire neighbourhoods to rubble, destroy schools and hospitals and tear apart families, neighbourhoods and communities. A UN resolution banned these bombs in 2014, yet more than 11,000 of them have been dropped on populated areas since that resolution was passed. [3] This is because the international community has failed to enforce its ban. Many of these bombs are dropped on areas like Ghouta where people have been living under a crippling siege for two years with no access to food, water or much needed medical supplies.
Syrians who have had to hold in their arms the bloodied disfigured bodies of their loved ones really wish they could take part in discussions regarding the fate of their own country, but they're often not invited. It is regrettable that Syrian speakers who represent these victims and have lived the quintessential painful Syrian experience have not been invited to take part in this panel.
We are nonviolent activists who are part of the Planet Syria network, a group of over a hundred civil society groups in Syria. We work on the ground to shore up nascent civil institutions and to provide basic services to residents in areas outside of government control. Our network has not taken any position vis-a-vis intervention on against ISIS because we consider ISIS a symptom of the problem rather than the crux of it. We are saddened that debates in the UK are centred around ISIS but wilfully ignore the Syrian government's vicious aerial war on its own people. The government killed hundreds of thousands and displaced millions of Syrians long before ISIS ever materialised in Syria. If it's human lives the UK public and the Stop the War coalition are concerned about, then shouldn't people there get a chance to hear the perspective of those who have borne the bulk of the suffering? We believe that inviting a Syrian representative of the Planet Syria network to sit on your panel will enrich the conversation and make it more constructive.
We have been living this nightmare for almost half a decade now and we feel we are entitled to take part in conversations regarding our fate. We are dismayed at the number of anti-war panels and lectures that have taken place in the West which have failed to include Syrians in their impressive lists of participants. We hope you won't continue to exclude us from these important conversations about the fate of our country because when you do so, you further disempower the very same Syrians who have been disempowered by various perpetrators in this conflict.
All we want is a chance to voice our perspective as Syrians who see potential solutions where others only see challenges. We can add a much needed layer to this debate which has remained stubbornly removed from the reality most Syrians are living. There is the status quo in Syria and there is the 'Stop The War' movement in the UK. Until you take that extra step to consider that what we have to say is indispensable to the conversation around Syria, your conversation unfortunately has little bearing on Syrians' fate.
On the event description, you write that military intervention in Syria could be 'catastrophic for the whole region.' There is already a huge catastrophe in the region. Syria is hemorrhaging flows of refugees into neighbouring countries. Syrian migrants are drowning every week as they try to reach European shores on dinghy boats to give their children a shot at a decent life. But they're fleeing so much more than ISIS, so our biggest hope is to broaden the UK debate to take that glaring fact into account.
We would like you to listen to us because right now, absent Syrian voices, the debate ignores the valuable real-life experiences of nonviolent Syrians who can offer solutions. We would be more than glad to send a representative of Planet Syria to the panel and we patiently await your invitation.
About Planet Syria: http://on.planetsyria.org/about/
Planet Syria
[1] http://www.stopwar.org.uk/events/stop-the-war-events-national/10-sep-london-public-meeting
[2] These are the figures for 2015 only from 1 January to 31 July. If you go back to the beginning of the uprising the difference between the government and Isis is much larger, since Isis was born from the conflict and did not exist in 2011. Source: Syria Network for Human Rights and Violations Documentation Center (http://sn4hr.org/ and https://www.vdc-sy.info/index.php/en/ ).
[3] Syrian Observatory for Human Rights (http://www.syriahr.com/en/ ). UNSCR 2139 was signed in February 2014. This is the number of barrel bombs from February 2014 to July 2015. According to the US State Department, more than 2,000 barrel bombs were dropped in the month of July alone. http://www.theguardian.com/world/2015/may/30/syrian-army-air-strikes-aleppo-islamic-state
Labels: #ListenToSyrians, Stop The War Coalition
Bruno 8 September 2015 at 08:59
military interventions have being prove to be a complete failure before as in Iraq and Libya, Syria wont be any different.
Time and in Time your beloved Free Syrian Army has being seen with the ISIS attacking Kurds and Christians.
"Barrel bombs, which are cheap and easily manufactured, are dropped by government helicopters on a daily basis. "
The video footage's so far by your rebel supporters which are low in quality haven't being convincing and some of them are questionable.
" We work on the ground to shore up nascent civil institutions and to provide basic services to residents in areas outside of government control. "
Also Includes Sharia law.
How has an Intervention helped the Libyans? the people behind syriauk and similar groups who cheer upon the wishes of John McCain and Sunni regime states are the ones behind the current chaos and your helping them to achieve further.
Putin get out of Syria!
Another refusal for Raja
#ListenToSyrians at the Labour Conference
Art by Esam Hamzeh
A Syrian Love Story
London to Calais: Report on 19 September solidarit...
Ros Ereira and Abdulaziz Almashi speaking at Solid...
#ListenToSyrians on a No-Fly Zone
Sorry Syria: Iranian activists call for an end to ...
Until the Assad regime's murderous tyranny is halt...
Massive solidarity march with refugees organised b...
Report from a House of Commons Foreign Affairs Com...
Planet Syria at the House of Commons
#ListenToSyrians
To help Syrian refugees, stop Assad
Stop The War: "Not appropriate" to hear Syrians at...
Solidarity with Refugees – March in London 12th Se...


We didn't have 3 day holidays, we did observe a half day on Holy Thursday, then no school on Good Friday and following Easter Day, we went back to school on monday.
I remember school letting out in early June about the 10th or so, I'm talking only of the pubic schools from the county and city where I lived. But I think it may have been the same in most of the states at that time.
I remember observing President Lincoln's Birthday on Feb, 12th and we had President Washington's Birthday off on Feb, 22nd. We had a half day on Dec 23, for the Christmas Holidays and went back after the new year.
Dec 31 New Year's Eve.
My Sister reminded me how she got a pair of roller skates with 2 books of Plaid Stamps in 1958! Things were hard to come by for a family of 12 back in the days of the 1950's .
My Mother would save them up whenever she went to the A&P Supermarket a few blocks from my home at the time.
Every time you went to the store you would get back so many stamps depending on the amount you spent and then stick them in the book they supplied.
•Most people had one TV and it was black and white. There were only three channels, ABC, NBC and CBS.


When Should You Choose CNC Plastic Machining?
If you're considering plastics for your shop, you have several things to think about. For example, do you have the right equipment and tools for CNC plastic machining? Is it really a better choice over stainless steel, aluminum, or carbon steel? Let's look at some important features of machining plastics to help you make an informed decision.
* Metals are made from one material. However, plastics are often manufactured from several different materials.
* Metals have specific melting points, and the same is not true for plastics. In fact, melting points can vary a great deal.
* Plastics expand during the process of machining. This expansion can be as much as 500 percent.
Some plastics easily chip and melt when you machine them.
* Weight – on average, plastics are much lighter than most metals, even aluminum.
* Corrosion resistance- plastics cannot corrode or rust.
* Insulation – some plastic materials can insulate from heat and electricity.
* Wear – some plastic parts offer excellent wearing properties.
When you work with plastics, you can choose either thermoplastic or thermoset plastics.
Thermoset materials don't melt. However, this property comes with a cost because they're easy to chip. Names include phenolic materials, melamine, and epoxy.
Thermoplastic materials are the best choices for machining. You can melt and re-melt them and still use them. This includes materials like PVC, polyethylene, ABS, and Teflon.
If your shop isn't set up for plastics, choose a machine shop known for its high-quality CNC plastic machining services.
Why Hire a Precision Machining Company?


text:
upcoming World News
upcomingworldnews.com
Home » Life » Sony Removes CD Projekt's Cyberpunk 2077 From PlayStation Store
Sony Removes CD Projekt's Cyberpunk 2077 From PlayStation Store
U.S. Weekly Jobless Claims Unexpectedly Climb To Three-Month High
After reporting a significant increase in first-time claims for U.S. unemployment benefits in the previous week, the Labor Department released a report on Thursday showing initial jobless claims unexpectedly saw further upside in the week ended December 12th.
The report said initial jobless claims rose to 885,000, an increase of 23,000 from the previous week's revised level of 862,000.
The continued increase surprised economist, who had expected jobless claims to drop to 800,000 from the 853,000 originally reported for the previous week.
With the unexpected increase, jobless claims climbed to their highest level since hitting 893,000 in the week ended September 5th.
"While hope is on the horizon as the coronavirus vaccine comes online, the labor market, for now, remains under a severe strain as Covid cases surge and restrictions on activity are put in place," said Nancy Vanden Houten, Lead U.S. Economist at Oxford Economics.
The Labor Department said the less volatile four-week moving average also rose to 812,500, an increase of 34,250 from the previous week's revised average of 778,250.
Meanwhile, the report said continuing claims, a reading on the number of people receiving ongoing unemployment assistance, fell by 273,000 to 5.508 million in the week ended December 5th.
The four-week moving average of continuing claims also slid to 5,726,250, a decrease of 215,500 from the previous week's revised average of 5,941,750.
Auditioning for the Role of Boyfriend
When you have been strung along and ghosted by guys who play it cool, how do you handle a man who is adoring and sincere?
By Amre Klimchak
PayPal CEO: Our move into cryptocurrencies is to bolster utility
New York (CNN Business) As bitcoin surges to all-time highs, the most prominent cryptocurrency exchange has signaled its intent to go public.
Cryptocurrency brokerage Coinbase said Thursday that it has filed a draft registration statement with the Securities and Exchange Commission, paving the way for plans for an eventual initial public offering.
The announcement comes as interest in bitcoin and other cryptocurrencies has soared during the coronavirus pandemic. Investors have found such currencies attractive as the US dollar weakens.
Bitcoin has been smashing its own price records and recently surpassed the symbolic $20,000-a-coin milestone. It has since continued to climb higher, and was last trading just shy of $23,000, according to data provider Refinitiv.
Coinbase was launched in 2012, according to its website, and "more than 35 million people in over 100 countries trust Coinbase to buy, sell, store, use and earn cryptocurrency." The company indicates it has more than $25 billion in assets on the platform and more than $320 billion in total volume traded.
Coinbase declined to provide additional comment.
Homfa Cabinets Recalled Due To Tip-Over, Entrapment Risks
Homfa Cabinets, manufactured by China's Shenzhen Luosi Ge Trading Co., has been recalled citing tip-over and entrapment risks for children, according to the U.S. Consumer Product Safety Commission.
The recall involves about 6,375 units of Homfa HPB-087 and HPB-106 Cabinets. The HPB-087 was sold in walnut brown and the HPB-106 was sold in wood grain. The cabinets measure about 29.75 inches tall, 31.5 inches wide, and 15.4 inches deep and weigh about 59 pounds.
The affected products were sold online at www.amazon.com from July 2019 through September 2020 from between $90 to $130.
According to the agency, the recalled cabinets are unstable if not anchored to the wall, posing tip-over and entrapment hazards that can result in death or serious injuries to children.
The cabinets do not comply with the performance requirements of the U.S. voluntary industry standard.
However, no incidents are reported to date related to the recalled products.
Consumers will get Homfa's pre-paid shipping labels. They can remove the cabinet's drawer slides and return them to the firm for a full refund. The rest of the dresser should be discarded.
In similar recalls, Transform SR Holding Management LLC in August called back about 19,900 units of 4-drawer chests, sold exclusively at Kmart stores, citing the same reasons.
Swiss current account surplus narrows in Q3
ZURICH, Dec 18 (Reuters) – Switzerland's third-quarter current account surplus shrank to 9 billion Swiss francs ($10.17 billion), 3 billion less than a year earlier, the Swiss National Bank said on Friday.
The figure marked a downturn from the 9.88 billion surplus posted in the second quarter.
"This decline was particularly due to the lower receipts surplus in trade in goods and services. In the case of the goods trade, the decline was attributable to gold trading," the SNB said in a statement.
Sony Interactive Entertainment or SIE, part of Japanese consumer electronics maker Sony Corp., is removing popular gaining title Cyberpunk 2077, developed by CD Projekt Red, from PlayStation Store until further notice.
The company said it strives to ensure a high level of customer satisfaction, and will begin to offer a full refund for all gamers who have purchased Cyberpunk 2077 via PlayStation Store.
Sony's decision follows complaints from several Cyberpunk 2077 players about the game's inconsistent and buggy performance, particularly on the PS4 console.
The company said, "Once we have confirmed that you purchased Cyberpunk 2077 via PlayStation Store, we will begin processing your refund. Please note that completion of the refund may vary based on your payment method and financial institution."
Cyberpunk 2077 developer CD Projekt Red said earlier that people unsatisfied with their purchase on the PS4 or Xbox One should request a refund.
Meanwhile, CD Projekt noted that all copies of the game previously purchased digitally on PlayStation Store remain available for use by their respective buyers. Gamers can still buy physical versions of the game in retail and mail order stores. All copies, whether digital or physical, will continue to receive support and updates from the Company.
Tagged PlayStation, SONY
Thomas Rhett Announces New Album 'Center Point Road'
Margot Robbie as Sharon Tate in 'Once Upon a Time in Hollywood' – See the Poster!
Answering your vehicle-related queries
PM Lee thanks migrant workers for their trust and support on International Migrants Day
Brexit backlash: EU figure said 'good riddance' to UK amid trade talks row
Nicola Sturgeon slammed for ignoring economic trauma independence will bring to Scotland
Pentagon Moves to Block Exam of Tortured Guantánamo Prisoner
COVID-19: All UK travel corridors to close from Monday in face of new coronavirus variants
Pence, occupying a leadership void, calls Harris to offer assistance — as Trump plans his Inauguration Day getaway.
Do as we say or pay the price! Barnier orders UK to obey EU rules in outrageous warning
Before the Capitol riot, there were calls for cash and talk of revolution
Brexit is done! Remain MP shoots down Article 16 plot to rewrite Boris's deal
Meghan Markle and Harry 'wrestle with their position in life' after exit from royal duties
Kelly Tolhurst: Minister resigns to spend 'precious time' with family after 'devastating news'
Thai students mark Teachers' Day with paint-soaked protest
2 Covid-19 cases on Australian Open flight, 24 tennis players quarantined
Copyright © 2021 upcoming World News. All rights reserved.


text:
Precision Value & Health Names Doug Fulling President
As the industry leader in delivering complementary, integrated and specialized capabilities across the commercialization continuum, Fulling will be accountable for the overall strategy, organizational leadership, financial performance, and next-level growth of this market-leading commercial enterprise.
https://www.pharmalive.com/wp-content/uploads/2023/01/PrecisionValue.jpg 450 706 Administrator https://www.pharmalive.com/wp-content/uploads/2020/01/Pharmalive_4c-300x37.png Administrator2023-01-26 20:00:382023-01-27 11:50:14Precision Value & Health Names Doug Fulling President
Eduardo Tavares joins dentsu health as executive creative director
February 2023, Issue Archives, Marketing & Advertising
Dentsu today announced the appointment of Eduardo Tavares as Executive Creative Director, dentsu health. In this role, multi-award winner Tavares, will concept and deliver best-in-class creative campaigns – merging data and technology with craft – to drive value and competitive advantage for dentsu health clients across health & wellness and pharmaceutical sectors.
https://www.pharmalive.com/wp-content/uploads/2023/01/EduardoTavares-dentsuhealth.jpg 600 795 Administrator https://www.pharmalive.com/wp-content/uploads/2020/01/Pharmalive_4c-300x37.png Administrator2023-01-26 06:30:472023-02-01 10:33:54Eduardo Tavares joins dentsu health as executive creative director
Elly Price joins Fishawack Health as managing director of global marketing
Price brings more than 25 years of experience in pharmaceutical marketing, extensive expertise across a wealth of therapy areas, and deep leadership experience in the EMEA and APAC regions.
https://www.pharmalive.com/wp-content/uploads/2023/01/EllyPrice-FishawackHealth.jpg 500 456 Administrator https://www.pharmalive.com/wp-content/uploads/2020/01/Pharmalive_4c-300x37.png Administrator2023-01-19 14:33:182023-01-19 14:33:18Elly Price joins Fishawack Health as managing director of global marketing
SCIRIS announces appointment of new CEO
Global healthcare communications company SCIRIS is delighted to announce the appointment of Isaac Batley as new CEO.
January 9, 2023 /by Administrator
https://www.pharmalive.com/wp-content/uploads/2023/01/IsaacBatley-SCIRIS-2023.jpg 500 500 Administrator https://www.pharmalive.com/wp-content/uploads/2020/01/Pharmalive_4c-300x37.png Administrator2023-01-09 11:19:262023-02-01 10:42:29SCIRIS announces appointment of new CEO
JUICE Pharma names new chief experience officer
Chris Ozanian will be responsible for expanding on JUICE'S ongoing digital success with clients who are craving omnichannel leadership and a customer-focused approach to digital marketing.
https://www.pharmalive.com/wp-content/uploads/2022/12/Chris_Ozanian-JUICE-Pharma-2022.jpg 500 512 Administrator https://www.pharmalive.com/wp-content/uploads/2020/01/Pharmalive_4c-300x37.png Administrator2023-01-06 12:52:292023-02-01 09:46:09JUICE Pharma names new chief experience officer
The Bloc recruits Greg Ylagan as creative director of art
Ylagan joins the agency's creative leadership team and will oversee a NY-based and hybrid team of art directors, playing a crucial role in producing the visual communications for his brands and in growing a culture of artistic inventiveness.
December 15, 2022 /by Administrator
https://www.pharmalive.com/wp-content/uploads/2022/12/GregYlagan-TheBloc-scaled.jpg 1700 2560 Administrator https://www.pharmalive.com/wp-content/uploads/2020/01/Pharmalive_4c-300x37.png Administrator2022-12-15 12:56:592023-02-01 10:46:35The Bloc recruits Greg Ylagan as creative director of art
JUICE Pharma names first ever chief business officer
The privately-held, full-service global creative marketing communications agency focused on healthcare has appointed Katya Petrova to chief business officer with the responsibility of providing JUICE clients with direction and oversight from inception through execution.
December 6, 2022 /by Administrator
https://www.pharmalive.com/wp-content/uploads/2022/12/Katya_Petrova_JUICEPharma.jpg 600 658 Administrator https://www.pharmalive.com/wp-content/uploads/2020/01/Pharmalive_4c-300x37.png Administrator2022-12-06 11:38:402022-12-06 12:32:38JUICE Pharma names first ever chief business officer
Hill Holliday Health welcomes Stephanie Berman as chief creative officer
Berman will oversee the creative across all clients, building on the agency's creative reputation and advancing its mission of creating inspiring ideas that emotionally move people to take action.
https://www.pharmalive.com/wp-content/uploads/2022/12/StephanieBerman-Hill-Holliday-Health.jpg 600 599 Administrator https://www.pharmalive.com/wp-content/uploads/2020/01/Pharmalive_4c-300x37.png Administrator2022-12-06 09:52:422022-12-06 09:53:41Hill Holliday Health welcomes Stephanie Berman as chief creative officer
AbelsonTaylor appoints Rebecca Visconti vice president of marketing intelligence
December 2022, Issue Archives, Marketing & Advertising
Visconti will oversee all aspects of the agency's marketing intelligence services, leading a team of accomplished specialists who provide data, analysis, insights, multi-touch attribution models, predictive data intelligence, and success metrics for enhancing client and agency decision-making and optimizing the impact of client marketing campaigns.
https://www.pharmalive.com/wp-content/uploads/2022/11/AbelsonTaylor-Rebecca-Visconti-1.jpg 533 400 Administrator https://www.pharmalive.com/wp-content/uploads/2020/01/Pharmalive_4c-300x37.png Administrator2022-11-29 09:11:402022-12-01 12:01:05AbelsonTaylor appoints Rebecca Visconti vice president of marketing intelligence
Teva Pharma appoints Novartis, Biogen vet as new president and CEO
Business, Therapeutics
Capping a tumultuous year of legal battles, Teva Pharmaceuticals has found a new president and CEO. Effective Jan. 1, 2023, Richard Francis will take the company's reins as Kåre Schultz retires.
November 21, 2022 /by BioSpace
https://www.pharmalive.com/wp-content/uploads/2021/08/Teva-Wins-Three-Loses-Six-in-Patent-Battle-Over-Migraine-Drug-BioSpace-8-16-21.jpeg 350 625 BioSpace https://www.pharmalive.com/wp-content/uploads/2020/01/Pharmalive_4c-300x37.png BioSpace2022-11-21 10:09:052022-11-21 10:09:05Teva Pharma appoints Novartis, Biogen vet as new president and CEO


text:
Monsters & Mullets: Comprehensive Awesomeness Spectrum
Britannia x Brittannia
Underground Reading: Cinnamon Skin by John D MacDonald
"There are no hundred percent heroes. Every man can be broken when things happen to him in a certain order, with a momentum and an intensity that awaken ancient fears in the back of his mind."
With those opening words - perhaps the best in the entire series - the reader is catapulted into the dark world of Cinnamon Skin (1982). The twentieth Travis McGee adventure is a rare return to the structure of the early books in the series, but, this time, with an unusual twist: it isn't all about Travis.
It is no secret that I find Travis to be unusually self-absorbed. It is part of his... well... "charm" is a strong word... "literary appeal" might be a more accurate phrase. Unfortunately for the great scoundrel, whilst he was lazily observing the mystery in Free Fall in Crimson, terrible things happened to his friend Meyer.
Meyer is the great leveller: a genuinely lovable character both within the book and to the reader. He's intelligent, harmless, astute and furry. His unrelenting generosity serves as the perfect foil to Travis' ceaseless self-obsession.
Cinnamon Skin begins in a state of nervous tension. Travis is still in a relationship with Annie Renzetti, although she's making noises about putting her "career" over her "beach-bum boyfriend who doesn't want to commit". Meyer is incredibly shaken up about the conclusion of Free Fall. Essentially, Travis didn't clue Meyer in to the fact that he had a small legion of biker assassins on-side, so as events unfolded, Meyer felt that a) he had betrayed Travis and b) was certainly going to die. As the opening quote states, that'll break a man.
In-between half-heartedly sorting out his own relationship issues, Travis tries to prod Meyer back to his normal, vibrant self. Everything fails until, horrifically, Meyer's niece (his sole remaining relative) and nephew are blown up in a terrorist attack - one seemingly aimed at Meyer. Where the gentle(ish) affection of Travis has failed, the clarion call to action has succeeded: Meyer is Unleashed.
Happy to ditch the softly-softly crap, Travis locks, loads and joins Meyer on the warpath. What follows is a very traditional Travis McGee scavenger hunt. The baddie is identified pretty rapidly (Evan, the nephew, is a bad, bad egg), but Meyer insists on really knowing him inside out before (presumably) turning him inside out. The two amigos bounce around the wilds of Texas, digging further and further into Evan's life until they strike the golden truth. Once they've fully understand his dickishness (and he's fully dickish), they pack off to Mexico to wrap things up for good.
Concluding an adventure in Mexico is familiar ground for the series. As with previous episodes, MacDonald paints Mexico as a county with a thin veneer of imported civilisation - painted on top of a deep, restless well of native culture. Except when he stumbles, this doesn't come across as patronizing (just slightly imperialist). In Cinnamon Skin, for example, MacDonald paints the historical glories of the Mayans with a broad brush - and talks lovingly about the brilliant indigienous culture, growingly increasingly dull with the influx of cheap American condo salesmen. Still, when it comes down to it - if you want to kill someone in a JDM and have no questions afterwards, it needs to happen in a) the Everglades or b) Mexico.
Even the dramatic conclusion - the mandatory mano-y-mano between Travis and an equally hyper-masculine enemy - is traditional fare. Except, again, we have the intervention of Meyer. Travis is happily trudging through the jungle, beautiful woman by his side, machete at his hip - ready to fight against the odds against a sinister foe. And there's Meyer, stumbling beside him with a comedy shotgun and an ill-fitting baseball cap. And there's Meyer again, while Travis is pinned down under fire, saving the day...
Although Cinnamon Skin connects to the previous books in surface details (the source of Meyer's issues, Travis' soon-to-be-ex-girlfriend), it mostly feels like a pleasant throwback to Travis' earlier, more self-contained adventures. Meyer, long suffering in Travis' shadow, needed an adventure of his own and it is fun to watch him solve "people problems" that would have otherwise swamped the shag-or-smack McGee. Travis doesn't leave empty-handed, of course - following Annie's inevitable departure (type 3!), he's left to the tender mercies of Barbara, the incongruously-named Mayan beauty. (She's also sticking around at the end of the book, so only time will tell if she's still there for the inevitable break-up and/or explosion at the beginning of The Lonely Silver Rain.)
(This is the 20th review in The Endless Rainbow Snark, a quest to read all the Travis McGee books in order.)
Posted by Jared in Books, Endless Rainbow Snark, Mystery and Thriller, Underground Reading | Permalink | Comments (1)


text:
Aug 11, 2011 | 02:17
Gunbattles and funerals in Syria
Aug. 11 - Amateur video appears to show gunbattles, funerals and protests around Syria - with bodies lying in the street after a bloody crackdown in Homs. Deborah Lutterbeck reports.
Amateur video out of Syria shows bodies on the streets on Homs. The video, which could not be independently verified by Reuters, comes as rights groups say at least 15 people have been killed in an assault on the city. Footage purportedly shot in Hama Wednesday shows tanks on the streets of the city. The Syrian government says the army has pulled out of the city after a 10 day campaign. In a suburb of Damascus gunfire rings through the streets. Gunmen, purportedly loyal to the government open fire. More footage from the northwest town of Taftnaz shows a funeral procession. Rights groups say at least 1,700 civilians have been killed since the uprising began some five months ago. Another funeral service, out of Homs. The mourners continue to call for the end of President Bashar al Assad's 11-year rule Night time footage from Homs shows demonstrators in the main Square. They call for the end of the regime. The Syrian government says 500 solders and police have been killed in the bloodshed. The government blames "armed gangs" and "terrorists". Deborah Lutterbeck, Reuters


text:
package com.amazonaws.services.glacier.model;

import java.io.Serializable;
import javax.annotation.Generated;
import com.amazonaws.protocol.StructuredPojo;
import com.amazonaws.protocol.ProtocolMarshaller;

/**
 *

 * Contains the description of an Amazon S3 Glacier job.
 *

 */
@Generated("com.amazonaws:aws-java-sdk-code-generator")
public class GlacierJobDescription implements Serializable, Cloneable, StructuredPojo {

    /**
     *

     * An opaque string that identifies an Amazon S3 Glacier job.
     *

     */
    private String jobId;
    /**
     *

     * The job description provided when initiating the job.
     *

     */
    private String jobDescription;
    /**
     *

     * The job type. This value is either ArchiveRetrieval, InventoryRetrieval, or
     * Select.
     *

     */
    private String action;
    /**
     *

     * The archive ID requested for a select job or archive retrieval. Otherwise, this field is null.
     *

     */
    private String archiveId;
    /**
     *

     * The Amazon Resource Name (ARN) of the vault from which an archive retrieval was requested.
     *

     */
    private String vaultARN;
    /**
     *

     * The UTC date when the job was created. This value is a string representation of ISO 8601 date format, for example
     * "2012-03-20T17:03:43.221Z".
     *

     */
    private String creationDate;
    /**
     *

     * The job status. When a job is completed, you get the job's output using Get Job Output (GET output).
     *

     */
    private Boolean completed;
    /**
     *

     * The status code can be InProgress, Succeeded, or Failed, and indicates the
     * status of the job.
     *

     */
    private String statusCode;
    /**
     *

     * A friendly message that describes the job status.
     *

     */
    private String statusMessage;
    /**
     *

     * For an archive retrieval job, this value is the size in bytes of the archive being requested for download. For an
     * inventory retrieval or select job, this value is null.
     *

     */
    private Long archiveSizeInBytes;
    /**
     *

     * For an inventory retrieval job, this value is the size in bytes of the inventory requested for download. For an
     * archive retrieval or select job, this value is null.
     *

     */
    private Long inventorySizeInBytes;
    /**
     *

     * An Amazon SNS topic that receives notification.
     *

     */
    private String sNSTopic;
    /**
     *

     * The UTC time that the job request completed. While the job is in progress, the value is null.
     *

     */
    private String completionDate;
    /**
     *

     * For an archive retrieval job, this value is the checksum of the archive. Otherwise, this value is null.
     *

     *

     * The SHA256 tree hash value for the requested range of an archive. If the InitiateJob request for an
     * archive specified a tree-hash aligned range, then this field returns a value.
     *

     *

     * If the whole archive is retrieved, this value is the same as the ArchiveSHA256TreeHash value.
     *

     *

     * This field is null for the following:
     *

     *

     *

     *

     * Archive retrieval jobs that specify a range that is not tree-hash aligned
     *

     *

     *

     *

     *

     *

     * Archival jobs that specify a range that is equal to the whole archive, when the job status is
     * InProgress
     *

     *

     *

     *

     *

     *

     * Inventory jobs
     *

     *

     *

     *

     * Select jobs
     *

     *

     *

     */
    private String sHA256TreeHash;
    /**
     *

     * The SHA256 tree hash of the entire archive for an archive retrieval. For inventory retrieval or select jobs, this
     * field is null.
     *

     */
    private String archiveSHA256TreeHash;
    /**
     *

     * The retrieved byte range for archive retrieval jobs in the form StartByteValue-EndByteValue. If no
     * range was specified in the archive retrieval, then the whole archive is retrieved. In this case,
     * StartByteValue equals 0 and EndByteValue equals the size of the archive minus 1. For inventory
     * retrieval or select jobs, this field is null.
     *

     */
    private String retrievalByteRange;
    /**
     *

     * The tier to use for a select or an archive retrieval. Valid values are Expedited,
     * Standard, or Bulk. Standard is the default.
     *

     */
    private String tier;
    /**
     *

     * Parameters used for range inventory retrieval.
     *

     */
    private InventoryRetrievalJobDescription inventoryRetrievalParameters;
    /**
     *

     * Contains the job output location.
     *

     */
    private String jobOutputPath;
    /**
     *

     * Contains the parameters used for a select.
     *

     */
    private SelectParameters selectParameters;
    /**
     *

     * Contains the location where the data from the select job is stored.
     *

     */
    private OutputLocation outputLocation;

    /**
     *

     * An opaque string that identifies an Amazon S3 Glacier job.
     *

     *
     * @param jobId
     *        An opaque string that identifies an Amazon S3 Glacier job.
     */

    public void setJobId(String jobId) {
        this.jobId = jobId;
    }

    /**
     *

     * An opaque string that identifies an Amazon S3 Glacier job.
     *

     *
     * @return An opaque string that identifies an Amazon S3 Glacier job.
     */

    public String getJobId() {
        return this.jobId;
    }

    /**
     *

     * An opaque string that identifies an Amazon S3 Glacier job.
     *

     *
     * @param jobId
     *        An opaque string that identifies an Amazon S3 Glacier job.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withJobId(String jobId) {
        setJobId(jobId);
        return this;
    }

    /**
     *

     * The job description provided when initiating the job.
     *

     *
     * @param jobDescription
     *        The job description provided when initiating the job.
     */

    public void setJobDescription(String jobDescription) {
        this.jobDescription = jobDescription;
    }

    /**
     *

     * The job description provided when initiating the job.
     *

     *
     * @return The job description provided when initiating the job.
     */

    public String getJobDescription() {
        return this.jobDescription;
    }

    /**
     *

     * The job description provided when initiating the job.
     *

     *
     * @param jobDescription
     *        The job description provided when initiating the job.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withJobDescription(String jobDescription) {
        setJobDescription(jobDescription);
        return this;
    }

    /**
     *

     * The job type. This value is either ArchiveRetrieval, InventoryRetrieval, or
     * Select.
     *

     *
     * @param action
     *        The job type. This value is either ArchiveRetrieval, InventoryRetrieval, or
     *        Select.
     * @see ActionCode
     */

    public void setAction(String action) {
        this.action = action;
    }

    /**
     *

     * The job type. This value is either ArchiveRetrieval, InventoryRetrieval, or
     * Select.
     *

     *
     * @return The job type. This value is either ArchiveRetrieval, InventoryRetrieval, or
     *         Select.
     * @see ActionCode
     */

    public String getAction() {
        return this.action;
    }

    /**
     *

     * The job type. This value is either ArchiveRetrieval, InventoryRetrieval, or
     * Select.
     *

     *
     * @param action
     *        The job type. This value is either ArchiveRetrieval, InventoryRetrieval, or
     *        Select.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see ActionCode
     */

    public GlacierJobDescription withAction(String action) {
        setAction(action);
        return this;
    }

    /**
     *

     * The job type. This value is either ArchiveRetrieval, InventoryRetrieval, or
     * Select.
     *

     *
     * @param action
     *        The job type. This value is either ArchiveRetrieval, InventoryRetrieval, or
     *        Select.
     * @see ActionCode
     */

    public void setAction(ActionCode action) {
        withAction(action);
    }

    /**
     *

     * The job type. This value is either ArchiveRetrieval, InventoryRetrieval, or
     * Select.
     *

     *
     * @param action
     *        The job type. This value is either ArchiveRetrieval, InventoryRetrieval, or
     *        Select.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see ActionCode
     */

    public GlacierJobDescription withAction(ActionCode action) {
        this.action = action.toString();
        return this;
    }

    /**
     *

     * The archive ID requested for a select job or archive retrieval. Otherwise, this field is null.
     *

     *
     * @param archiveId
     *        The archive ID requested for a select job or archive retrieval. Otherwise, this field is null.
     */

    public void setArchiveId(String archiveId) {
        this.archiveId = archiveId;
    }

    /**
     *

     * The archive ID requested for a select job or archive retrieval. Otherwise, this field is null.
     *

     *
     * @return The archive ID requested for a select job or archive retrieval. Otherwise, this field is null.
     */

    public String getArchiveId() {
        return this.archiveId;
    }

    /**
     *

     * The archive ID requested for a select job or archive retrieval. Otherwise, this field is null.
     *

     *
     * @param archiveId
     *        The archive ID requested for a select job or archive retrieval. Otherwise, this field is null.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withArchiveId(String archiveId) {
        setArchiveId(archiveId);
        return this;
    }

    /**
     *

     * The Amazon Resource Name (ARN) of the vault from which an archive retrieval was requested.
     *

     *
     * @param vaultARN
     *        The Amazon Resource Name (ARN) of the vault from which an archive retrieval was requested.
     */

    public void setVaultARN(String vaultARN) {
        this.vaultARN = vaultARN;
    }

    /**
     *

     * The Amazon Resource Name (ARN) of the vault from which an archive retrieval was requested.
     *

     *
     * @return The Amazon Resource Name (ARN) of the vault from which an archive retrieval was requested.
     */

    public String getVaultARN() {
        return this.vaultARN;
    }

    /**
     *

     * The Amazon Resource Name (ARN) of the vault from which an archive retrieval was requested.
     *

     *
     * @param vaultARN
     *        The Amazon Resource Name (ARN) of the vault from which an archive retrieval was requested.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withVaultARN(String vaultARN) {
        setVaultARN(vaultARN);
        return this;
    }

    /**
     *

     * The UTC date when the job was created. This value is a string representation of ISO 8601 date format, for example
     * "2012-03-20T17:03:43.221Z".
     *

     *
     * @param creationDate
     *        The UTC date when the job was created. This value is a string representation of ISO 8601 date format, for
     *        example "2012-03-20T17:03:43.221Z".
     */

    public void setCreationDate(String creationDate) {
        this.creationDate = creationDate;
    }

    /**
     *

     * The UTC date when the job was created. This value is a string representation of ISO 8601 date format, for example
     * "2012-03-20T17:03:43.221Z".
     *

     *
     * @return The UTC date when the job was created. This value is a string representation of ISO 8601 date format, for
     *         example "2012-03-20T17:03:43.221Z".
     */

    public String getCreationDate() {
        return this.creationDate;
    }

    /**
     *

     * The UTC date when the job was created. This value is a string representation of ISO 8601 date format, for example
     * "2012-03-20T17:03:43.221Z".
     *

     *
     * @param creationDate
     *        The UTC date when the job was created. This value is a string representation of ISO 8601 date format, for
     *        example "2012-03-20T17:03:43.221Z".
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withCreationDate(String creationDate) {
        setCreationDate(creationDate);
        return this;
    }

    /**
     *

     * The job status. When a job is completed, you get the job's output using Get Job Output (GET output).
     *

     *
     * @param completed
     *        The job status. When a job is completed, you get the job's output using Get Job Output (GET output).
     */

    public void setCompleted(Boolean completed) {
        this.completed = completed;
    }

    /**
     *

     * The job status. When a job is completed, you get the job's output using Get Job Output (GET output).
     *

     *
     * @return The job status. When a job is completed, you get the job's output using Get Job Output (GET output).
     */

    public Boolean getCompleted() {
        return this.completed;
    }

    /**
     *

     * The job status. When a job is completed, you get the job's output using Get Job Output (GET output).
     *

     *
     * @param completed
     *        The job status. When a job is completed, you get the job's output using Get Job Output (GET output).
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withCompleted(Boolean completed) {
        setCompleted(completed);
        return this;
    }

    /**
     *

     * The job status. When a job is completed, you get the job's output using Get Job Output (GET output).
     *

     *
     * @return The job status. When a job is completed, you get the job's output using Get Job Output (GET output).
     */

    public Boolean isCompleted() {
        return this.completed;
    }

    /**
     *

     * The status code can be InProgress, Succeeded, or Failed, and indicates the
     * status of the job.
     *

     *
     * @param statusCode
     *        The status code can be InProgress, Succeeded, or Failed, and
     *        indicates the status of the job.
     * @see StatusCode
     */

    public void setStatusCode(String statusCode) {
        this.statusCode = statusCode;
    }

    /**
     *

     * The status code can be InProgress, Succeeded, or Failed, and indicates the
     * status of the job.
     *

     *
     * @return The status code can be InProgress, Succeeded, or Failed, and
     *         indicates the status of the job.
     * @see StatusCode
     */

    public String getStatusCode() {
        return this.statusCode;
    }

    /**
     *

     * The status code can be InProgress, Succeeded, or Failed, and indicates the
     * status of the job.
     *

     *
     * @param statusCode
     *        The status code can be InProgress, Succeeded, or Failed, and
     *        indicates the status of the job.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see StatusCode
     */

    public GlacierJobDescription withStatusCode(String statusCode) {
        setStatusCode(statusCode);
        return this;
    }

    /**
     *

     * The status code can be InProgress, Succeeded, or Failed, and indicates the
     * status of the job.
     *

     *
     * @param statusCode
     *        The status code can be InProgress, Succeeded, or Failed, and
     *        indicates the status of the job.
     * @see StatusCode
     */

    public void setStatusCode(StatusCode statusCode) {
        withStatusCode(statusCode);
    }

    /**
     *

     * The status code can be InProgress, Succeeded, or Failed, and indicates the
     * status of the job.
     *

     *
     * @param statusCode
     *        The status code can be InProgress, Succeeded, or Failed, and
     *        indicates the status of the job.
     * @return Returns a reference to this object so that method calls can be chained together.
     * @see StatusCode
     */

    public GlacierJobDescription withStatusCode(StatusCode statusCode) {
        this.statusCode = statusCode.toString();
        return this;
    }

    /**
     *

     * A friendly message that describes the job status.
     *

     *
     * @param statusMessage
     *        A friendly message that describes the job status.
     */

    public void setStatusMessage(String statusMessage) {
        this.statusMessage = statusMessage;
    }

    /**
     *

     * A friendly message that describes the job status.
     *

     *
     * @return A friendly message that describes the job status.
     */

    public String getStatusMessage() {
        return this.statusMessage;
    }

    /**
     *

     * A friendly message that describes the job status.
     *

     *
     * @param statusMessage
     *        A friendly message that describes the job status.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withStatusMessage(String statusMessage) {
        setStatusMessage(statusMessage);
        return this;
    }

    /**
     *

     * For an archive retrieval job, this value is the size in bytes of the archive being requested for download. For an
     * inventory retrieval or select job, this value is null.
     *

     *
     * @param archiveSizeInBytes
     *        For an archive retrieval job, this value is the size in bytes of the archive being requested for download.
     *        For an inventory retrieval or select job, this value is null.
     */

    public void setArchiveSizeInBytes(Long archiveSizeInBytes) {
        this.archiveSizeInBytes = archiveSizeInBytes;
    }

    /**
     *

     * For an archive retrieval job, this value is the size in bytes of the archive being requested for download. For an
     * inventory retrieval or select job, this value is null.
     *

     *
     * @return For an archive retrieval job, this value is the size in bytes of the archive being requested for
     *         download. For an inventory retrieval or select job, this value is null.
     */

    public Long getArchiveSizeInBytes() {
        return this.archiveSizeInBytes;
    }

    /**
     *

     * For an archive retrieval job, this value is the size in bytes of the archive being requested for download. For an
     * inventory retrieval or select job, this value is null.
     *

     *
     * @param archiveSizeInBytes
     *        For an archive retrieval job, this value is the size in bytes of the archive being requested for download.
     *        For an inventory retrieval or select job, this value is null.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withArchiveSizeInBytes(Long archiveSizeInBytes) {
        setArchiveSizeInBytes(archiveSizeInBytes);
        return this;
    }

    /**
     *

     * For an inventory retrieval job, this value is the size in bytes of the inventory requested for download. For an
     * archive retrieval or select job, this value is null.
     *

     *
     * @param inventorySizeInBytes
     *        For an inventory retrieval job, this value is the size in bytes of the inventory requested for download.
     *        For an archive retrieval or select job, this value is null.
     */

    public void setInventorySizeInBytes(Long inventorySizeInBytes) {
        this.inventorySizeInBytes = inventorySizeInBytes;
    }

    /**
     *

     * For an inventory retrieval job, this value is the size in bytes of the inventory requested for download. For an
     * archive retrieval or select job, this value is null.
     *

     *
     * @return For an inventory retrieval job, this value is the size in bytes of the inventory requested for download.
     *         For an archive retrieval or select job, this value is null.
     */

    public Long getInventorySizeInBytes() {
        return this.inventorySizeInBytes;
    }

    /**
     *

     * For an inventory retrieval job, this value is the size in bytes of the inventory requested for download. For an
     * archive retrieval or select job, this value is null.
     *

     *
     * @param inventorySizeInBytes
     *        For an inventory retrieval job, this value is the size in bytes of the inventory requested for download.
     *        For an archive retrieval or select job, this value is null.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withInventorySizeInBytes(Long inventorySizeInBytes) {
        setInventorySizeInBytes(inventorySizeInBytes);
        return this;
    }

    /**
     *

     * An Amazon SNS topic that receives notification.
     *

     *
     * @param sNSTopic
     *        An Amazon SNS topic that receives notification.
     */

    public void setSNSTopic(String sNSTopic) {
        this.sNSTopic = sNSTopic;
    }

    /**
     *

     * An Amazon SNS topic that receives notification.
     *

     *
     * @return An Amazon SNS topic that receives notification.
     */

    public String getSNSTopic() {
        return this.sNSTopic;
    }

    /**
     *

     * An Amazon SNS topic that receives notification.
     *

     *
     * @param sNSTopic
     *        An Amazon SNS topic that receives notification.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withSNSTopic(String sNSTopic) {
        setSNSTopic(sNSTopic);
        return this;
    }

    /**
     *

     * The UTC time that the job request completed. While the job is in progress, the value is null.
     *

     *
     * @param completionDate
     *        The UTC time that the job request completed. While the job is in progress, the value is null.
     */

    public void setCompletionDate(String completionDate) {
        this.completionDate = completionDate;
    }

    /**
     *

     * The UTC time that the job request completed. While the job is in progress, the value is null.
     *

     *
     * @return The UTC time that the job request completed. While the job is in progress, the value is null.
     */

    public String getCompletionDate() {
        return this.completionDate;
    }

    /**
     *

     * The UTC time that the job request completed. While the job is in progress, the value is null.
     *

     *
     * @param completionDate
     *        The UTC time that the job request completed. While the job is in progress, the value is null.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withCompletionDate(String completionDate) {
        setCompletionDate(completionDate);
        return this;
    }

    /**
     *

     * For an archive retrieval job, this value is the checksum of the archive. Otherwise, this value is null.
     *

     *

     * The SHA256 tree hash value for the requested range of an archive. If the InitiateJob request for an
     * archive specified a tree-hash aligned range, then this field returns a value.
     *

     *

     * If the whole archive is retrieved, this value is the same as the ArchiveSHA256TreeHash value.
     *

     *

     * This field is null for the following:
     *

     *

     *

     *

     * Archive retrieval jobs that specify a range that is not tree-hash aligned
     *

     *

     *

     *

     *

     *

     * Archival jobs that specify a range that is equal to the whole archive, when the job status is
     * InProgress
     *

     *

     *

     *

     *

     *

     * Inventory jobs
     *

     *

     *

     *

     * Select jobs
     *

     *

     *

     *
     * @param sHA256TreeHash
     *        For an archive retrieval job, this value is the checksum of the archive. Otherwise, this value is
     *        null.

     *

     *        The SHA256 tree hash value for the requested range of an archive. If the InitiateJob request for an
     *        archive specified a tree-hash aligned range, then this field returns a value.
     *

     *

     *        If the whole archive is retrieved, this value is the same as the ArchiveSHA256TreeHash value.
     *

     *

     *        This field is null for the following:
     *

     *

     *

     *

     *        Archive retrieval jobs that specify a range that is not tree-hash aligned
     *

     *

     *

     *

     *

     *

     *        Archival jobs that specify a range that is equal to the whole archive, when the job status is
     *        InProgress
     *

     *

     *

     *

     *

     *

     *        Inventory jobs
     *

     *

     *

     *

     *        Select jobs
     *

     *

     */

    public void setSHA256TreeHash(String sHA256TreeHash) {
        this.sHA256TreeHash = sHA256TreeHash;
    }

    /**
     *

     * For an archive retrieval job, this value is the checksum of the archive. Otherwise, this value is null.
     *

     *

     * The SHA256 tree hash value for the requested range of an archive. If the InitiateJob request for an
     * archive specified a tree-hash aligned range, then this field returns a value.
     *

     *

     * If the whole archive is retrieved, this value is the same as the ArchiveSHA256TreeHash value.
     *

     *

     * This field is null for the following:
     *

     *

     *

     *

     * Archive retrieval jobs that specify a range that is not tree-hash aligned
     *

     *

     *

     *

     *

     *

     * Archival jobs that specify a range that is equal to the whole archive, when the job status is
     * InProgress
     *

     *

     *

     *

     *

     *

     * Inventory jobs
     *

     *

     *

     *

     * Select jobs
     *

     *

     *

     *
     * @return For an archive retrieval job, this value is the checksum of the archive. Otherwise, this value is
     *         null.

     *

     *         The SHA256 tree hash value for the requested range of an archive. If the InitiateJob request for
     *         an archive specified a tree-hash aligned range, then this field returns a value.
     *

     *

     *         If the whole archive is retrieved, this value is the same as the ArchiveSHA256TreeHash value.
     *

     *

     *         This field is null for the following:
     *

     *

     *

     *

     *         Archive retrieval jobs that specify a range that is not tree-hash aligned
     *

     *

     *

     *

     *

     *

     *         Archival jobs that specify a range that is equal to the whole archive, when the job status is
     *         InProgress
     *

     *

     *

     *

     *

     *

     *         Inventory jobs
     *

     *

     *

     *

     *         Select jobs
     *

     *

     */

    public String getSHA256TreeHash() {
        return this.sHA256TreeHash;
    }

    /**
     *

     * For an archive retrieval job, this value is the checksum of the archive. Otherwise, this value is null.
     *

     *

     * The SHA256 tree hash value for the requested range of an archive. If the InitiateJob request for an
     * archive specified a tree-hash aligned range, then this field returns a value.
     *

     *

     * If the whole archive is retrieved, this value is the same as the ArchiveSHA256TreeHash value.
     *

     *

     * This field is null for the following:
     *

     *

     *

     *

     * Archive retrieval jobs that specify a range that is not tree-hash aligned
     *

     *

     *

     *

     *

     *

     * Archival jobs that specify a range that is equal to the whole archive, when the job status is
     * InProgress
     *

     *

     *

     *

     *

     *

     * Inventory jobs
     *

     *

     *

     *

     * Select jobs
     *

     *

     *

     *
     * @param sHA256TreeHash
     *        For an archive retrieval job, this value is the checksum of the archive. Otherwise, this value is
     *        null.

     *

     *        The SHA256 tree hash value for the requested range of an archive. If the InitiateJob request for an
     *        archive specified a tree-hash aligned range, then this field returns a value.
     *

     *

     *        If the whole archive is retrieved, this value is the same as the ArchiveSHA256TreeHash value.
     *

     *

     *        This field is null for the following:
     *

     *

     *

     *

     *        Archive retrieval jobs that specify a range that is not tree-hash aligned
     *

     *

     *

     *

     *

     *

     *        Archival jobs that specify a range that is equal to the whole archive, when the job status is
     *        InProgress
     *

     *

     *

     *

     *

     *

     *        Inventory jobs
     *

     *

     *

     *

     *        Select jobs
     *

     *

     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withSHA256TreeHash(String sHA256TreeHash) {
        setSHA256TreeHash(sHA256TreeHash);
        return this;
    }

    /**
     *

     * The SHA256 tree hash of the entire archive for an archive retrieval. For inventory retrieval or select jobs, this
     * field is null.
     *

     *
     * @param archiveSHA256TreeHash
     *        The SHA256 tree hash of the entire archive for an archive retrieval. For inventory retrieval or select
     *        jobs, this field is null.
     */

    public void setArchiveSHA256TreeHash(String archiveSHA256TreeHash) {
        this.archiveSHA256TreeHash = archiveSHA256TreeHash;
    }

    /**
     *

     * The SHA256 tree hash of the entire archive for an archive retrieval. For inventory retrieval or select jobs, this
     * field is null.
     *

     *
     * @return The SHA256 tree hash of the entire archive for an archive retrieval. For inventory retrieval or select
     *         jobs, this field is null.
     */

    public String getArchiveSHA256TreeHash() {
        return this.archiveSHA256TreeHash;
    }

    /**
     *

     * The SHA256 tree hash of the entire archive for an archive retrieval. For inventory retrieval or select jobs, this
     * field is null.
     *

     *
     * @param archiveSHA256TreeHash
     *        The SHA256 tree hash of the entire archive for an archive retrieval. For inventory retrieval or select
     *        jobs, this field is null.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withArchiveSHA256TreeHash(String archiveSHA256TreeHash) {
        setArchiveSHA256TreeHash(archiveSHA256TreeHash);
        return this;
    }

    /**
     *

     * The retrieved byte range for archive retrieval jobs in the form StartByteValue-EndByteValue. If no
     * range was specified in the archive retrieval, then the whole archive is retrieved. In this case,
     * StartByteValue equals 0 and EndByteValue equals the size of the archive minus 1. For inventory
     * retrieval or select jobs, this field is null.
     *

     *
     * @param retrievalByteRange
     *        The retrieved byte range for archive retrieval jobs in the form StartByteValue-EndByteValue.
     *        If no range was specified in the archive retrieval, then the whole archive is retrieved. In this case,
     *        StartByteValue equals 0 and EndByteValue equals the size of the archive minus 1. For
     *        inventory retrieval or select jobs, this field is null.
     */

    public void setRetrievalByteRange(String retrievalByteRange) {
        this.retrievalByteRange = retrievalByteRange;
    }

    /**
     *

     * The retrieved byte range for archive retrieval jobs in the form StartByteValue-EndByteValue. If no
     * range was specified in the archive retrieval, then the whole archive is retrieved. In this case,
     * StartByteValue equals 0 and EndByteValue equals the size of the archive minus 1. For inventory
     * retrieval or select jobs, this field is null.
     *

     *
     * @return The retrieved byte range for archive retrieval jobs in the form
     *         StartByteValue-EndByteValue. If no range was specified in the archive retrieval, then the
     *         whole archive is retrieved. In this case, StartByteValue equals 0 and EndByteValue equals
     *         the size of the archive minus 1. For inventory retrieval or select jobs, this field is null.
     */

    public String getRetrievalByteRange() {
        return this.retrievalByteRange;
    }

    /**
     *

     * The retrieved byte range for archive retrieval jobs in the form StartByteValue-EndByteValue. If no
     * range was specified in the archive retrieval, then the whole archive is retrieved. In this case,
     * StartByteValue equals 0 and EndByteValue equals the size of the archive minus 1. For inventory
     * retrieval or select jobs, this field is null.
     *

     *
     * @param retrievalByteRange
     *        The retrieved byte range for archive retrieval jobs in the form StartByteValue-EndByteValue.
     *        If no range was specified in the archive retrieval, then the whole archive is retrieved. In this case,
     *        StartByteValue equals 0 and EndByteValue equals the size of the archive minus 1. For
     *        inventory retrieval or select jobs, this field is null.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withRetrievalByteRange(String retrievalByteRange) {
        setRetrievalByteRange(retrievalByteRange);
        return this;
    }

    /**
     *

     * The tier to use for a select or an archive retrieval. Valid values are Expedited,
     * Standard, or Bulk. Standard is the default.
     *

     *
     * @param tier
     *        The tier to use for a select or an archive retrieval. Valid values are Expedited,
     *        Standard, or Bulk. Standard is the default.
     */

    public void setTier(String tier) {
        this.tier = tier;
    }

    /**
     *

     * The tier to use for a select or an archive retrieval. Valid values are Expedited,
     * Standard, or Bulk. Standard is the default.
     *

     *
     * @return The tier to use for a select or an archive retrieval. Valid values are Expedited,
     *         Standard, or Bulk. Standard is the default.
     */

    public String getTier() {
        return this.tier;
    }

    /**
     *

     * The tier to use for a select or an archive retrieval. Valid values are Expedited,
     * Standard, or Bulk. Standard is the default.
     *

     *
     * @param tier
     *        The tier to use for a select or an archive retrieval. Valid values are Expedited,
     *        Standard, or Bulk. Standard is the default.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withTier(String tier) {
        setTier(tier);
        return this;
    }

    /**
     *

     * Parameters used for range inventory retrieval.
     *

     *
     * @param inventoryRetrievalParameters
     *        Parameters used for range inventory retrieval.
     */

    public void setInventoryRetrievalParameters(InventoryRetrievalJobDescription inventoryRetrievalParameters) {
        this.inventoryRetrievalParameters = inventoryRetrievalParameters;
    }

    /**
     *

     * Parameters used for range inventory retrieval.
     *

     *
     * @return Parameters used for range inventory retrieval.
     */

    public InventoryRetrievalJobDescription getInventoryRetrievalParameters() {
        return this.inventoryRetrievalParameters;
    }

    /**
     *

     * Parameters used for range inventory retrieval.
     *

     *
     * @param inventoryRetrievalParameters
     *        Parameters used for range inventory retrieval.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withInventoryRetrievalParameters(InventoryRetrievalJobDescription inventoryRetrievalParameters) {
        setInventoryRetrievalParameters(inventoryRetrievalParameters);
        return this;
    }

    /**
     *

     * Contains the job output location.
     *

     *
     * @param jobOutputPath
     *        Contains the job output location.
     */

    public void setJobOutputPath(String jobOutputPath) {
        this.jobOutputPath = jobOutputPath;
    }

    /**
     *

     * Contains the job output location.
     *

     *
     * @return Contains the job output location.
     */

    public String getJobOutputPath() {
        return this.jobOutputPath;
    }

    /**
     *

     * Contains the job output location.
     *

     *
     * @param jobOutputPath
     *        Contains the job output location.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withJobOutputPath(String jobOutputPath) {
        setJobOutputPath(jobOutputPath);
        return this;
    }

    /**
     *

     * Contains the parameters used for a select.
     *

     *
     * @param selectParameters
     *        Contains the parameters used for a select.
     */

    public void setSelectParameters(SelectParameters selectParameters) {
        this.selectParameters = selectParameters;
    }

    /**
     *

     * Contains the parameters used for a select.
     *

     *
     * @return Contains the parameters used for a select.
     */

    public SelectParameters getSelectParameters() {
        return this.selectParameters;
    }

    /**
     *

     * Contains the parameters used for a select.
     *

     *
     * @param selectParameters
     *        Contains the parameters used for a select.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withSelectParameters(SelectParameters selectParameters) {
        setSelectParameters(selectParameters);
        return this;
    }

    /**
     *

     * Contains the location where the data from the select job is stored.
     *

     *
     * @param outputLocation
     *        Contains the location where the data from the select job is stored.
     */

    public void setOutputLocation(OutputLocation outputLocation) {
        this.outputLocation = outputLocation;
    }

    /**
     *

     * Contains the location where the data from the select job is stored.
     *

     *
     * @return Contains the location where the data from the select job is stored.
     */

    public OutputLocation getOutputLocation() {
        return this.outputLocation;
    }

    /**
     *

     * Contains the location where the data from the select job is stored.
     *

     *
     * @param outputLocation
     *        Contains the location where the data from the select job is stored.
     * @return Returns a reference to this object so that method calls can be chained together.
     */

    public GlacierJobDescription withOutputLocation(OutputLocation outputLocation) {
        setOutputLocation(outputLocation);
        return this;
    }

    /**
     * Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be
     * redacted from this string using a placeholder value.
     *
     * @return A string representation of this object.
     *
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("{");
        if (getJobId() != null)
            sb.append("JobId: ").append(getJobId()).append(",");
        if (getJobDescription() != null)
            sb.append("JobDescription: ").append(getJobDescription()).append(",");
        if (getAction() != null)
            sb.append("Action: ").append(getAction()).append(",");
        if (getArchiveId() != null)
            sb.append("ArchiveId: ").append(getArchiveId()).append(",");
        if (getVaultARN() != null)
            sb.append("VaultARN: ").append(getVaultARN()).append(",");
        if (getCreationDate() != null)
            sb.append("CreationDate: ").append(getCreationDate()).append(",");
        if (getCompleted() != null)
            sb.append("Completed: ").append(getCompleted()).append(",");
        if (getStatusCode() != null)
            sb.append("StatusCode: ").append(getStatusCode()).append(",");
        if (getStatusMessage() != null)
            sb.append("StatusMessage: ").append(getStatusMessage()).append(",");
        if (getArchiveSizeInBytes() != null)
            sb.append("ArchiveSizeInBytes: ").append(getArchiveSizeInBytes()).append(",");
        if (getInventorySizeInBytes() != null)
            sb.append("InventorySizeInBytes: ").append(getInventorySizeInBytes()).append(",");
        if (getSNSTopic() != null)
            sb.append("SNSTopic: ").append(getSNSTopic()).append(",");
        if (getCompletionDate() != null)
            sb.append("CompletionDate: ").append(getCompletionDate()).append(",");
        if (getSHA256TreeHash() != null)
            sb.append("SHA256TreeHash: ").append(getSHA256TreeHash()).append(",");
        if (getArchiveSHA256TreeHash() != null)
            sb.append("ArchiveSHA256TreeHash: ").append(getArchiveSHA256TreeHash()).append(",");
        if (getRetrievalByteRange() != null)
            sb.append("RetrievalByteRange: ").append(getRetrievalByteRange()).append(",");
        if (getTier() != null)
            sb.append("Tier: ").append(getTier()).append(",");
        if (getInventoryRetrievalParameters() != null)
            sb.append("InventoryRetrievalParameters: ").append(getInventoryRetrievalParameters()).append(",");
        if (getJobOutputPath() != null)
            sb.append("JobOutputPath: ").append(getJobOutputPath()).append(",");
        if (getSelectParameters() != null)
            sb.append("SelectParameters: ").append(getSelectParameters()).append(",");
        if (getOutputLocation() != null)
            sb.append("OutputLocation: ").append(getOutputLocation());
        sb.append("}");
        return sb.toString();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;

        if (obj instanceof GlacierJobDescription == false)
            return false;
        GlacierJobDescription other = (GlacierJobDescription) obj;
        if (other.getJobId() == null ^ this.getJobId() == null)
            return false;
        if (other.getJobId() != null && other.getJobId().equals(this.getJobId()) == false)
            return false;
        if (other.getJobDescription() == null ^ this.getJobDescription() == null)
            return false;
        if (other.getJobDescription() != null && other.getJobDescription().equals(this.getJobDescription()) == false)
            return false;
        if (other.getAction() == null ^ this.getAction() == null)
            return false;
        if (other.getAction() != null && other.getAction().equals(this.getAction()) == false)
            return false;
        if (other.getArchiveId() == null ^ this.getArchiveId() == null)
            return false;
        if (other.getArchiveId() != null && other.getArchiveId().equals(this.getArchiveId()) == false)
            return false;
        if (other.getVaultARN() == null ^ this.getVaultARN() == null)
            return false;
        if (other.getVaultARN() != null && other.getVaultARN().equals(this.getVaultARN()) == false)
            return false;
        if (other.getCreationDate() == null ^ this.getCreationDate() == null)
            return false;
        if (other.getCreationDate() != null && other.getCreationDate().equals(this.getCreationDate()) == false)
            return false;
        if (other.getCompleted() == null ^ this.getCompleted() == null)
            return false;
        if (other.getCompleted() != null && other.getCompleted().equals(this.getCompleted()) == false)
            return false;
        if (other.getStatusCode() == null ^ this.getStatusCode() == null)
            return false;
        if (other.getStatusCode() != null && other.getStatusCode().equals(this.getStatusCode()) == false)
            return false;
        if (other.getStatusMessage() == null ^ this.getStatusMessage() == null)
            return false;
        if (other.getStatusMessage() != null && other.getStatusMessage().equals(this.getStatusMessage()) == false)
            return false;
        if (other.getArchiveSizeInBytes() == null ^ this.getArchiveSizeInBytes() == null)
            return false;
        if (other.getArchiveSizeInBytes() != null && other.getArchiveSizeInBytes().equals(this.getArchiveSizeInBytes()) == false)
            return false;
        if (other.getInventorySizeInBytes() == null ^ this.getInventorySizeInBytes() == null)
            return false;
        if (other.getInventorySizeInBytes() != null && other.getInventorySizeInBytes().equals(this.getInventorySizeInBytes()) == false)
            return false;
        if (other.getSNSTopic() == null ^ this.getSNSTopic() == null)
            return false;
        if (other.getSNSTopic() != null && other.getSNSTopic().equals(this.getSNSTopic()) == false)
            return false;
        if (other.getCompletionDate() == null ^ this.getCompletionDate() == null)
            return false;
        if (other.getCompletionDate() != null && other.getCompletionDate().equals(this.getCompletionDate()) == false)
            return false;
        if (other.getSHA256TreeHash() == null ^ this.getSHA256TreeHash() == null)
            return false;
        if (other.getSHA256TreeHash() != null && other.getSHA256TreeHash().equals(this.getSHA256TreeHash()) == false)
            return false;
        if (other.getArchiveSHA256TreeHash() == null ^ this.getArchiveSHA256TreeHash() == null)
            return false;
        if (other.getArchiveSHA256TreeHash() != null && other.getArchiveSHA256TreeHash().equals(this.getArchiveSHA256TreeHash()) == false)
            return false;
        if (other.getRetrievalByteRange() == null ^ this.getRetrievalByteRange() == null)
            return false;
        if (other.getRetrievalByteRange() != null && other.getRetrievalByteRange().equals(this.getRetrievalByteRange()) == false)
            return false;
        if (other.getTier() == null ^ this.getTier() == null)
            return false;
        if (other.getTier() != null && other.getTier().equals(this.getTier()) == false)
            return false;
        if (other.getInventoryRetrievalParameters() == null ^ this.getInventoryRetrievalParameters() == null)
            return false;
        if (other.getInventoryRetrievalParameters() != null && other.getInventoryRetrievalParameters().equals(this.getInventoryRetrievalParameters()) == false)
            return false;
        if (other.getJobOutputPath() == null ^ this.getJobOutputPath() == null)
            return false;
        if (other.getJobOutputPath() != null && other.getJobOutputPath().equals(this.getJobOutputPath()) == false)
            return false;
        if (other.getSelectParameters() == null ^ this.getSelectParameters() == null)
            return false;
        if (other.getSelectParameters() != null && other.getSelectParameters().equals(this.getSelectParameters()) == false)
            return false;
        if (other.getOutputLocation() == null ^ this.getOutputLocation() == null)
            return false;
        if (other.getOutputLocation() != null && other.getOutputLocation().equals(this.getOutputLocation()) == false)
            return false;
        return true;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int hashCode = 1;

        hashCode = prime * hashCode + ((getJobId() == null) ? 0 : getJobId().hashCode());
        hashCode = prime * hashCode + ((getJobDescription() == null) ? 0 : getJobDescription().hashCode());
        hashCode = prime * hashCode + ((getAction() == null) ? 0 : getAction().hashCode());
        hashCode = prime * hashCode + ((getArchiveId() == null) ? 0 : getArchiveId().hashCode());
        hashCode = prime * hashCode + ((getVaultARN() == null) ? 0 : getVaultARN().hashCode());
        hashCode = prime * hashCode + ((getCreationDate() == null) ? 0 : getCreationDate().hashCode());
        hashCode = prime * hashCode + ((getCompleted() == null) ? 0 : getCompleted().hashCode());
        hashCode = prime * hashCode + ((getStatusCode() == null) ? 0 : getStatusCode().hashCode());
        hashCode = prime * hashCode + ((getStatusMessage() == null) ? 0 : getStatusMessage().hashCode());
        hashCode = prime * hashCode + ((getArchiveSizeInBytes() == null) ? 0 : getArchiveSizeInBytes().hashCode());
        hashCode = prime * hashCode + ((getInventorySizeInBytes() == null) ? 0 : getInventorySizeInBytes().hashCode());
        hashCode = prime * hashCode + ((getSNSTopic() == null) ? 0 : getSNSTopic().hashCode());
        hashCode = prime * hashCode + ((getCompletionDate() == null) ? 0 : getCompletionDate().hashCode());
        hashCode = prime * hashCode + ((getSHA256TreeHash() == null) ? 0 : getSHA256TreeHash().hashCode());
        hashCode = prime * hashCode + ((getArchiveSHA256TreeHash() == null) ? 0 : getArchiveSHA256TreeHash().hashCode());
        hashCode = prime * hashCode + ((getRetrievalByteRange() == null) ? 0 : getRetrievalByteRange().hashCode());
        hashCode = prime * hashCode + ((getTier() == null) ? 0 : getTier().hashCode());
        hashCode = prime * hashCode + ((getInventoryRetrievalParameters() == null) ? 0 : getInventoryRetrievalParameters().hashCode());
        hashCode = prime * hashCode + ((getJobOutputPath() == null) ? 0 : getJobOutputPath().hashCode());
        hashCode = prime * hashCode + ((getSelectParameters() == null) ? 0 : getSelectParameters().hashCode());
        hashCode = prime * hashCode + ((getOutputLocation() == null) ? 0 : getOutputLocation().hashCode());
        return hashCode;
    }

    @Override
    public GlacierJobDescription clone() {
        try {
            return (GlacierJobDescription) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new IllegalStateException("Got a CloneNotSupportedException from Object.clone() " + "even though we're Cloneable!", e);
        }
    }

    @com.amazonaws.annotation.SdkInternalApi
    @Override
    public void marshall(ProtocolMarshaller protocolMarshaller) {
        com.amazonaws.services.glacier.model.transform.GlacierJobDescriptionMarshaller.getInstance().marshall(this, protocolMarshaller);
    }
}

redpajama_set_name: RedPajamaGithub