text:
VAST Modular Camping Trailer Carries Kayaks And Features Clever Indoor/Outdoor Kitchen
Outdoor gear companies are beginning to redefine what a camping trailer can do. There's the Vauna, the towable van sauna, and then there's this futuristic trailer collaboration by The North Face and BMW.
But North Carolinian company SylvanSport really have managed to do it all in their latest camping trailer, the VAST, which offers as many sleeping and living facilities as a full-size four berth caravan. SylvanSport has managed to squeeze two queen-sized beds, an expandable bathroom and an indoor/outdoor kitchen into this 87 square foot trailer, with a clever modular design that even allows for gear hauling.
The VAST camping trailer is instantly recognisable as a SylvanSport creation.
The VAST is SylvanSport's first hard-sided camping trailer, revealed at this month's RVX show, an incredibly clever and versatile piece of kit that allows you to shift and slide the components inside to create the most functional living space for your needs.
The kitchen unit can be slid and lowered on 45º angled sliders for use indoors or out, and in doing so this creates an added bathroom area for a shower. The entire L-shaped lounge area can also be slid forward on a precision track system to create interior cargo space while retaining a functional seating area.
The VAST trailer features of of the most innovative designs we've seen this year.
Although its bright green paint color bears resemblance to their previous camping trailers, SylvanSport's VAST is nothing like its predecessors. A proprietary extruded aluminum frame supports the outer shell which is created using custom composite skin, which in turn is laminated onto an insulated wall structure. This makes the trailer both lightweight and strong, with double capped corners for added style and a waterproof finish. The VAST weighs just 2,500lbs and is capable of carrying up to 500lbs.
Showcasing the multiple gear-hauling solutions this trailer provides.
One of the clever design elements of this trailer is the secure side-mounted gear storage rack system, capable of hauling kayaks, canoes, SUPs or even boats. Bikes can be stored inside the trailer for security, while an exterior lockable gear storage pod slides forward to reveal protected storage for two propane tanks, two leisure batteries and a spare tire.
A fiberglass tailgate with built-in screen and sunshade opens for ease of loading, or to create an open-sided living area which invites the outdoors in.
At the rear of the VAST trailer sits a modular lounge and sleeping area with two queen-sized beds, one which is stowed away in the roof and can be lowered down via an electric winch, the other which is assembled from the lounge's table and cushions by sliding the seat forward.
This entire unit slides out of the way to allow for loading of cargo, and a side window hatch opens up to allow the dining table to be extended outside to create a bar, just one of the many ways in which SylvanSport have designed this trailer to push you into the great outdoors.
The trailer's lounge area can be configured in many different ways.
This theme continues in the "all season" kitchen, which contains a two burner gas stove, a portable Dometic fridge/freezer, a small stainless steel sink which is integrated into the stylish bamboo countertop and a modular storage system providing space for food and utensils.
The "all season" kitchen is a totally unique concept, using 45º angled sliders.
Once the kitchen has been slid out of the trailer, the bathroom's shower unit is revealed. In this surprisingly spacious bathroom, you'll find a residential sized shower/spa fed by a Truma-Combi on-demand hot water heater, a portable toilet, and another clever space-saving idea: a foldaway sink, which blends seamlessly with the wall.
The bathroom as seen from inside the trailer. The shower appears when the kitchen unit is slid outdoors.
After wowing crowds at the RVX show the pre-orders for the VAST camping trailer are piling up fast with an estimated retail base price of around $49,000. It's clear to see that SylvanSport has hit the market with a versatile, modular trailer that's going to be tough to beat.
Source: SylvanSport


text:
Funny old weather.
We set off back down the Ashby yesterday, a day when it didn't really dry up at all. It didn't start too badly, just light drizzle, which got heavier for a while then eased off, only to come back again later.
Meg and I took a walk up to the current end of the canal, just beyond the rebuilt Bridge 62.
That's your lot for the time being…
Bridge 62 had to be replaced, the original had been collapsed into the canal bed to make it easier to cross for the local farmer.
The Victorian water pumping station has now been converted into a private residence.
As you can see, Meg isn't very enthusiastic…
We returned through the swing bridge, topped off the water tank, then set off.
A boat coming out of Snarestone Tunnel.
One of only a handful seen on the move yesterday.
I didn't take too many pictures; experience has taught me that digital cameras and damp weather are uncomfortable bedfellows…
Coming through the woods just up from Shackerstone.
A welcome relief on a hot sunny day, but a bit gloomy on a cold damp one!
We didn't go much further, pulling in just before Bridge 52.
This morning I was pleased to see that the rain had passed over when I got up for a run. And it's stayed dry all day, until early evening when a couple of showers have blown through. It's also a lot warmer, a bit humid though.
We moved off soon after 10:00, under grey skies but with just a hint of blue showing through.
I slipped up the other day. I said that the bridge alongside the Sence Aqueduct carried the trackbed for the railway. Not so, that runs just beyond those trees in the distance. The bridge carries an unsurfaced road up to the station.
Coming out of Snarestone there's a length of protected bank between two fabric barriers.
From Bridge 44 to the terminus the canal is a Site of Special Scientific Interest (SSSI), due the rare flora and fauna to be found here. These barriers were installed to protect delicate plants from boat wash. You find them on the Montgomery Canal too.
These chaps aren't so rare, though
There weren't too many boats about today, either, but sod's law says you're going to meet at a bridge…
SSSI sign at Bridge 44
Gnarly tree roots take advantage of the canal water.
Open countryside now as we approach Market Bosworth.
We pulled in at Bosworth Marina, we could do with getting some groceries in so that'll be tomorrow.
Whether we move on afterwards or not remains to be seen…
Hi Steve, Angela. Thanks for that. Basin Bridge is the easiest for a post code though, eh. Enjoy your trip, good luck on the mooring hunt.
End of the navigation, and whatever happened to the weather!
Well, the end as far as we're concerned. Smaller boats can go further up the restored section, but boats of our length can't turn around up there.
And would you believe, after the heatwave of only a few days ago, that the outside temperature is now 14°, there's a chilly north-westerly blowing and I've resorted to lighting the stove! I was starting to regret buying that bag of smokeless a couple of weeks ago, now I might regret not buying two!
We arrived at Snarestone on Monday, mooring in the open about a quarter mile short of the tunnel.
Looking down on Market Bosworth Station, just a little way from the moorings closest to the town.
On Sunday Steve and Angela passed by, pulling in and spending an hour with us chatting, before continuing on to Snarestone.
Then Monday morning we were on our way ourselves.
More bank protection work going on.
We only just managed to scrape past, dragging the bottom as we crawled by.
The canal is very shallow at the sides along here, made worse by the levels being a bit down after the prolonged dry spell.
Photo-bombed by a duck!
Congerstone has a short length of moorings on rings just past Bridge 47.
Like most of the villages around here, it has a church and a pub, but no shops.
There's a sharp left turn at Shackerstone to line up with the aqueduct crossing over the River Sence.
Mind the floating reed beds!
Over the aqueduct.
The bridge to the left used to carry the railway up to Ashby, Shackerstone Station, now the northern terminus of the Battlefield Line, is hidden behind the trees.
Across the fields to the east is the village of Barton in the Beans. An unusual name, but derived from the traditional produce of the area, broad beans . It actually used to be Barton in Fabis, the Latin for the broad bean is Vicia Faba. The broad bean has been replaced with acres and acres of rape.
Remains of a Norman Motte and Bailey just out of Shackerstone.
Gopsall Wharf was built for loading coal boats, and would be handy for a Tesco delivery if it weren't for the height restriction barrier on the car park…
Another half a mile saw us pulled up, as I said, short of Snarestone.
It's open here, but the trees ahead indicate the start of the cutting before the tunnel. There are 48 hour moorings there, but overhung by the trees and gloomy.
We did move down to the moorings though, yesterday lunchtime, to meet visitors who came over to spend the afternoon with us.
Me, Andy and Donna, Mags, Meg, Sue and Trev over from New Zealand
Sue feeding the ducks
She loves any animals…
We had a great afternoon and evening, supper was provided by Steve's Fish Bar up in Measham and very good it was too. It's useful having a car and driver at hand… Well done Andy!
It's been getting cooler these last few days, and today we woke up to rain, with a distinct chill in the air. We hung around till 11, hoping for an improvement but it didn't seem to be getting any better so we untied anyway and set off through Snarestone Tunnel.
The 250 yard long tunnel is high and wide, don't forget that this was intended to be a broad canal, linking up with the Trent at Burton Upon Trent.
The ceiling gets a bit lower at the north end, though, where it's been partially relined.
Emerging back into daylight there's a short wooded cutting then open fields between Bridges 60 and 61.
The moorings, between Bridge 61 and the winding hole, were pretty full, so we winded, reversed and filled the water tank, then reversed again through the swing bridge and moored. Its a lot more open here anyway, not that there's much sunshine to see…
Since Market Bosworth Wharf – Locks 0, miles 7
Posted by Geoff and Mags at 3:50 pm 2 comments:
Glad that's over!
This sub-tropical, Mediterranean-type weather is all very well, but it starts to pale after a bit. Now the temperature's lower at least we can get some sleep at night!
And it had dropped considerably. Yesterday it was a full 10° cooler than Wednesday, and today, with a brisk westerly blowing, we're back into the high teens. We even had a short spatter of rain earlier this morning.
Heading under Wooden Top Bridge under grey skies
Good for the sun, maybe not so good for the wind and showers this weekend…
We stopped at Sutton Cheney Wharf for water and rubbish disposal. There was only one boat on the plastic pontoon, an elderly Springer.
The canal passes under a railway bridge that carried the Ashby and Nuneaton Joint Railway.
The track bed to the south (right) is inaccessible, but that to the north is a footpath to Shenton Station and the start of the preserved Battlefield Line.
The name of the railway derives from this being the area of the Battle of Bosworth, when the balance of power in England, and the crown, shifted from the Plantagenates to the Tudors with the defeat and death of King Richard III. I wrote a lengthy piece on the battle when we passed this way in 2011. If you're interested click here…
We toddled on barely above tickover. The canal is very shallow in places and especially on the offside. Passing oncoming traffic often caused us to scrape the bottom, but going slowly meant we didn't get stuck fast.
Near Shenton the canal crosses a road on an aqueduct, and a field down on the right used to be the site of Richard III's memorial stone, it being thought to be the place where he met his end.
New evidence suggests that he more likely died a little to the south, and the stone has been removed to outside the Visitor Centre. The moorings here and the footpath across the field have been officially closed, but it looks like the bankside, at least, is still usable.
Crossing the open areas of pasture the wind was quite brisk, rattling the foliage.
Looking west across to Warwickshire
I'd forgotten how pretty this essentially rural canal is.
We pulled in just past the entrance to the new Bosworth Marina.
We'll be here at least for tomorrow. We need some fresh fruit and veg and the town of Market Bosworth is a mile away up the hill.
Longest day, hottest day!
Yes it's official. Today has been the hottest June day since the summer of '76. And with five days of exceptionally warm weather it's also officially a heatwave. All change now though as we head further into the week…
We stayed put yesterday, no reason really, just that we're in no rush. Today I was up early to get my morning run in before it got too warm, I was back, showered and breakfasted by half-eight, ready to take Meg out for a short walk.
Then we were moving on, heading up towards the terminus.
Unusually for this end of the canal Bridge 20 is stone-built. Most of those crossing the canal this side of Hinckley have been built of engineering bricks.
It's not looking so good, though…
There are pleasant-looking private moorings next to Wykin Bridge, No.21.
Judging by it's position alongside two roads I thought that it must have been built for an industrial or commercial use. But there's no evidence of it's existence on maps before 1950.
Stoke Wharf, on the other hand, is probably contemporary with the canal.
It's now used by the Ashby Boat Company and has outlived the usefulness of the railway station opposite! The station was on the Ashby and Nuneaton Joint Railway (Joint because it was built by the Midland Railway and the London and North–Western Railway) which opened in 1873. The line ceased to carry passengers in 1931, and was completely closed in 1962.
Looks like we're on the second brood now!
We pulled in after about 90 minutes near Bridge 31, Wooden Top Bridge.
Not a spotty dog in sight! You have to be of a certain age to know what I mean…
The Woodentops.
The animation was a joy to watch. Video here.
Hi Steve, Ang. We'll look out for you, we're going to be on the Ashby for another week at least.
Hi Judith. Sorry, haven't a clue where the thermometer came from, we've had it ages. It does have an outside probe, though, and is battery powered. Have a look on ebay, lots of choice there.
Thanks Carol, we did!
End of the navigation, and whatever happened to th...
A VERY hot weekend!
Heading back to Hinckley
A bit more good weather.
After a cloudy day…
Just a little one
A fuel top-up before moving up to the Farm Shop
Up the cut to Hinckley
Bright and breezy as we head onto the Ashby
A surprise visit and a blowy trip.
A miserable day, and a second Dutch invasion.
Hats and a Celtic Queen
Easy up the rest of the Atherstone Locks.

redpajama_set_name: RedPajamaCommonCrawl


What's it like to GET PAID?
We believe in what you do, and your success is our success. Let's join forces so you can GET PAID today.
We want to help you GET PAID!
Our GET PAID services are designed for health and wellness professionals who need to level up their business and don't have time to waste on one-size-fits-all solutions. You need results now!
Create offers your customers can't resist! We'll strategize with you to build a sales funnel that puts cash in your pocket while you sleep.
What's a Left Brain and a Right Brain?
Most people are either "Right Brained" or "Left Brained". The Left Brains tend to be more logical and process driven. They are organized planners that focus on getting things done quickly. Right Brains are typically free spirits who draw on emotions and creativity bring new ideas into the world and connect with people.
At Left Right Labs, our Left Brains are responsible for developing the marketing strategies that bring results to our clients. The Right Brains create touch points, relatable copy and eye-catching visuals to forge a marketing solution that connects your ideal client to your brand.
We need your undivided attention for the duration of your scheduled project. Don't worry, we know you have a business to run. You don't have to drop everything and be at our beck and call.
We will present you with clear timelines and a list of items needed from you. We also schedule all of our milestone meetings in advance so you can manage your time accordingly.
If you're a Left Brainer, you can sit back and enjoy the magic of a stress-free creative process. If you're a Right Brainer, you can relish the freedom of creativity within the boundaries of gentle, strategic guidance.
What if something comes up and I need to reschedule?
Life happens. We totally get it. And even though we operate on tight deadlines and strict delivery schedules, we're not robots.
When the unexpected pops up, our Right Brain will make sure your needs are met and the Left Brain will go to work on executing our Plan B solution.
Be honest about your situation and we'll be honest with you about what we can do to resolve it.
How can you deliver this so quickly?
At Left Right Labs, our Left Brain team members excel at developing proven processes that are optimized for maximum efficiency. We also don't juggle multiple projects.
When we schedule your project, we plan to focus exclusively on you. We set specific timelines and milestones meetings so you know exactly what's happening at all times.
Our Right Brain will make sure your ideas are heard at each step of the project and our Left Brain will shift the gears to make it happen.
Why does it cost so much? Do you have any cheaper options?
We're actually very affordable. We're a small agency and we all work from the comfort of our home offices, which means we don't have a ton of overhead and added expenses that we pass on to you. Compare us to the brick and mortar agencies and you'll find we're probably a better fit for your budget than you might think.
We also aren't just selling you an expensive template. We have over 12 years of experience in this industry and our combined Left Brain/Right Brain knowledge brings the best of both worlds to every project we touch.
Whether it's saving you time through automation, creating higher trust levels through branding, or generating more revenue by increasing your conversion rates, every project we deliver has a clear strategic purpose for our clients.
We require 50% down before the project kickoff. If your project has a time frame of 3 weeks or less, the balance will be due the week of completion.
For longer time frames, the remaining balance will be split into appropriate intervals across the project timeline, with the final balance coming due during the week of completion.
What happens after my project is done?
Our clients say we are super fun people and by the end of your project, we'll likely be friends as well as strategic partners for your business.
Don't worry, we won't leave you hanging. Our Right Brainers will stay in touch and our Left Brainers will check under the hood to make sure your business is operating smoothly each month. We also offer monthly coaching packages with a Left Brain, a Right Brain or both!
And of course we can always help you create your next coaching product, sales funnel and more. Should you need any tech help, you can contact our Help Desk and a Left Brainer will be happy to assist you.
I have worked with Katrina on a couple of projects now and have found her to be very dedicated, attentive to detail, patient and thorough in carrying out her work. She is very artistic and has brought to life just what I envisioned for both my website and ebook.


text:
Niestrudek lśniący, niestrudek błyszczyk (Bembidion lampros) – gatunek chrząszcza z rodziny biegaczowatych. Jest typem nomenklatorycznym podrodzaju Metallina Motschulsky, 1864.

 Występowanie
Rozprzestrzeniony jest w Europie, Azji (po Syberię), zawleczony również do Ameryki Północnej. W Polsce jest pospolity na terenie całego kraju z wyjątkiem Wzgórz Trzebnickich i Kotliny Nowotarskiej.
  Rójka
Najliczniej pojawia się od początków czerwca do końca sierpnia, na polach i łąkach.
 Wygląd
Chrząszcz długości 2,8–4,5 mm. Jest bardzo ruchliwy na powierzchni gleby nawet przy pełnym nasłonecznieniu.
 Pokarm
Drapieżny jak inne biegaczowate, żywi się drobnymi larwami mszyc (Aphidoidea) oraz ich jajami. Na szkółkach jest szkodnikiem wysianych nasion, w których wygryza dziury sięgające części wewnętrznej.
 Znaczenie
Niestrudek znany jest w leśnictwie i ogrodnictwie. Może lokalnie wyrządzić duże szkody we wschodach roślin.

Zobacz też
 systematyka chrząszczy
 chrząszcze Polski
 szkodniki sosen

Przypisy

Biegaczowate
Chrząszcze Ameryki Północnej
Chrząszcze Europy
Chrząszcze Rosji
Gatunki i podgatunki zwierząt nazwane w 1784 roku

redpajama_set_name: RedPajamaWikipedia


text:
Společnost Wielton SA je polský výrobce návěsů, přívěsů a nástaveb.

Wielton byla založena v roce 1996 a je kotována na burze cenných papírů ve Varšavě od roku 2006. V roce 2015 společnost převzal italský konkurent Italiana Rimorchi, ve stejném roce se stala majoritním vlastníkem francouzských konkurentů Fruehauf. Tím převzetí Wielton je jedné ze tří největších výrobců užitkových vozidel na celém světě. V segmentu přívěs sklápěč, společnost je v Evropě od roku 2014 vůdce.

Wielton zaměstnává 2637 lidí ve čtyřech závodech v Polsku, Itálii, Francii a Rusku. V roce 2016 moderní inovační centrum bylo otevřeno v sídle společnosti. Výrobky společnosti jsou prodávány do Evropě, Asii a Africe. V Česku distribuuje produkty společnosti Wielton firma ES-TRADING s.r.o. ve Velkém Meziříčí.

Reference

Externí odkazy

 Oficiální stránky společnosti
 Oficiální stránky oficiálního dovozce v Česku

Polské firmy
Firmy založené roku 1996


text:
opinion, psychology, storytelling, technology, video games
My Playstation 4 may be sentient, and it freaked me out!
Transhumanism, androids, electric sheep… I've always had a fascination with life beyond (Two Sou… Ok, I'll see myself out!) our limited existence in meatspace. Last night, a regular evening playing a game turned into a collision course with androids, consoles and fourth-wall breaking shenanigans.
My PS4 tried to pull a fast one on me together with Detroit: Become Human – or rather its main menu UI, and it was quite baffling. I'll paint you a picture: there I was, sitting on the couch playing Detroit, nearing the end (a good one I might add, because I'm a do-gooder), when all of a sudden (Look away now if you don't want to be spoiled, for this blog is dark and full of spoilers)
It has a moving blue light on it – just like the Androids of Detroit… (Image: Wikipedia)
after watching Connor getting pulled back to Zen Garden by Cyberlife in order for them to assassinate Markus, I was walking through the blizzard when suddenly, my PS4 – well, Detroit – crashed. I was thrown in to the PS4 mainframe, angry as hell as I'd just been denied gratification for a huge payoff, fully anticipating a big final showdown (which, to be honest, turned out to be a bit like a cold slap to the face). Then I booted the game back up and I felt that yet-to-occur cold slap in my face.
First, upon loading the main menu, the android Chloe, which acts as a humanoid UI/guide in the game's menu, asked me whether we were friends. At this point, alarms started to go off in my head – is this a trap? Like the X-men reset sequence wayback when or Nier's memory sacrifice ending, is this just the game's way of testing me? If I answer no, do I lose my save and need to start over? I felt creeped out by the multiple Chloes I encountered in an earlier scene, more so than by any other character in the game, so I may not have chosen to answer 'yes' of my own accord but I felt obliged to, as I felt my progress was being held hostage at that point.
She seemed satisfied with the answer, and I was relieved.
That relief soon faded away as I pressed 'continue' in the main menu. Chloe seemed unnerved, frightened even, and asked do i really want to continue, whether it'd be better to leave it at that or start over (I'm not entirely sure, as I was quite shell shocked at this point [Editor's note: the line was "Maybe we should leave things as they are"]), and I was given the choice to go on ahead or stop in my tracks. At this point as the proverbial ball had started to roll, I hesitated again – is this some final twist the game has in store, to see whether I'm actually, truly committed to the androids' cause? Should I leave this revolution to play its natural course without my input, leave Connor stranded in his own code, just so I can lull myself into a false sense of security, thinking I've at least ensured his continued – albeit suspended – existence?
I still chose to continue, at which point I could see Chloe's heart sink and exclaim me to have the right to do as I wished. I noticed a cold shiver go down my spine. Did I condemn myself – and by extension, the characters – to fail? Did I struggle all this way in misguided faith, nay, entitlement, thinking that choosing the righteous path will ultimately be rewarded, only for the game to gloriously undermine my good deeds and underscore a point, that despite my efforts to strive for a hypothetical common good, life can still pull the rug from underneath my, and by extension, everyone else's feet?
Be as it may, the game was already resuming my save from the demonstration scene before Connor is pulled back to Zen Garden. I played the game through to the end – the worst I had imagined didn't come to pass and I did actually manage a good ending. And yet, I felt a chill to my very bones. Was the game making a point about free will, humans and artificial intelligence by making me second guess my own choices so poignantly, right before the end? If so, the game had succeeded beyond my wildest dreams.
Alas, it wasn't so. As the credits rolled, I looked things up and it turned out to have been merely a happy combination of accidents. Usually when the game crashes, Chloe the UI apologises for the crash. That didn't happen to me – instead I was treated to self-actualised, hitherto unimaginably deep levels of storytelling, conjured by yours truly. I was demoralised by the discovery that this was just all in my head. And a bit disappointed that I wasn't as glamorously made to question the very nature of the game or the characters I was controlling as I'd have raced to conclude by that point. The fact that the system or game malfunctioned ended up undermining a decently fair ending. Despite Detroit's storied faults, I had become immersed with the game, all the while recognising how on-the-nose it was at many points. But I liked playing it, and challenging myself to 'do good'.
But then it hit me – what if it was my darling PS4 making a point about me and my playing? After all, not so long ago, I was bidding auf wiedersehens to Nazi danglers by the truck load (thank you, Playstation Plus), and for the past week, I had been immersed in trying to save everyone, machine or not-machine.
Maybe my Playstation 4 has become sentient? If not, then what does this episode say about me?
September 25, 2019 September 25, 2019 #games, #gaming, #reaction, #sony, #spoilers, Androids, Fourth Wall, storytelling
One thought on "My Playstation 4 may be sentient, and it freaked me out!"
roosaj says:
I had a similar experience while playing Detroit: Become Human!! I was interrogating some nearly broken down Androids as Connor and when the one I was talking to shut down…. the whole game crashed too and I was like holy shit the timing was too uncanny.
Previous Previous post: Piecing Together the Newest Clues for Death Stranding
Next Next post: What Kingdom Hearts Taught Me About Depression
Blogger, your friendly neighbourhood Metal Gear enthusiast. A child of the 80's, Omnilion used to live in a tiny city in English West Midlands where he started blogging. He's a keen musician, living instrument (possibly a trombone) and a music lover, who likes to play games as well. Enjoys movies, literature, friends and being a total wackjob. Possibly a Viking spy. Games have been a part of his life since early childhood, including titles like Bubble Bobble, Commander Keens, Slick 'n' slide, etc. His first console, which was the start of a keen interest in games, was the Sony Playstation, Anno Domini 1996. Ever since games have been an integral part of his being, and later consoles include Playstation 2, PSP, PS Vita, Playstation 3, and a Playstation 4. Are you sensing a pattern here? His favorite series, and the best series ever, is the Metal Gear-series, which has inspired his interest in voice acting, voice production, and further fueling his love for music. Other favorites include Final Fantasy series, Hitman series and Syphon Filter series, not forgetting the latest Deus Exs. Any further inquiries should be addressed to Yours Truly. Thank you for your co-operation. DON'T PANIC!	View all posts by omnilion


text:
(the former IBM Building)
Developer: The International Business Machines Corporation
Architect: Edward Larrabee Barnes
Erected: 1983
Much underappreciated when it opened, this sharply chiseled, dark green giant may not be a masterpiece of modernity, but it is very impressive and definitely one of the city's finest oases.
Take a square column, slice off a large wedge facing southwest, cut away a chunk from the base facing northeast and add a saw-tooth skylight atrium on its southwest side and you have the basic form. The photograph above, taken from the 56th Street entrance of Sony Plaza, shows the roof of the atrium, the former IBM Building on the right, and the rear of Trump Tower on the left.
Then fill the atrium with huge bamboo trees, finish everything finely with rich materials, add the finest general-purpose museum space in the city in the basement, connect the atrium to the adjacent Trump Tower atrium and you have the 43-story building that formerly was known as the IBM Building before that company sold it to its present owners.
From right to left, Sony/ATT, former IBM, Trump, 712 Fifth Avenue and 9 West 57th Street towers
What you also have is a whole much greater than its parts because this tower cannot be fully considered without its relationship with two other major skyscrapers, the Trump Tower to the immediate west and the Sony (formerly A. T. & T.) Building (see The City Review article) to the immediate south. These three towers, shown at the left in a view from Fifth Avenue and 53rd Street, form a high-rise enclave that by themselves would "make" any other city and which in their aggregate dramatically changed the focus of the midtown office market. One could well argue that the building's bamboo court atrium is the epicenter of the city's most desirable office market. While the Plaza district has been the city's most elegant for most of the century for its hotels and shops, this trio solidified it as the most desirable corporate address.
Incredibly, both this building and the A. T. & T. Building were abandoned after a only few years by their corporate developers, a stunning quirk of financial and real estate history and probably corporate mismanagement. Neither building, in fact, were official corporate headquarters as the companies had long since sneaked out of the city, but the two buildings epitomized the tradition of distinctive, proud corporate monuments.
The former IBM Building, whose cantilevered entrance is shown below, was acquired by a venture headed by Edward J. Minskoff, a member of a family long associated with major office building development in Manhattan after World War II. The former A. T. & T. Building was acquired by the Sony Corporation for its American headquarters.
If two of the mightiest corporate names in the history of the United States cannot tolerate or support a major headquarters building in New York, perhaps the city is doomed. At the very least, such a major shift in corporate thinking reflects a serious decline in the city's stature as the sine qua non of the business world, especially since both abandonments occurred prior to the explosion of interest in the World Wide Web on the Internet with all of its implications for global connectivity via computers rather than in person.
IBM's decision was the more understandable of the two as the company had endured more than a decade of ludicrous mismanagement of the business it virtually invented: personal computers. It actually needed the money. Indeed, its sale of the building was not as dastardly as its outrageous decision to close its splendid, very elegant, museum-like exhibition space that had hosted a most impressive series of great art exhibitions. Not surprisingly, the company soon decided to also sell off many of its most valuable paintings from its famous art collection, which had helped garner the company a world-wide reputation as a leading corporate patron of the arts. It happened to sell the art when the market was down considerably, also.
The decision of both companies to sell their famous skyscrapers at almost distress prices in a real estate depression was an early and very disturbing sign of corporate downsizing that no doubt warmed stockholders' hearts while depressing the hearts of all civilized people. If the board of directors of the companies had been more astute and waited a few years, they could have realized substantially greater sales results as the real estate market boomed in the late 1990's. So much for "shareholders' interests" and "corporate responsibility." So much for neighborhood, to say nothing of urban and civic and responsibility.
View of top of tower from Fifth Avenue and 57th Street
Adding insult to injury and kicking the city while it's down, the new owners of both buildings also shared an amazing contempt for contractual agreements with the city. It was no surprise, of course, that city officials meekly, albeit outrageously, acquiesced.
Mr. Minskoff, a dapper contemporary art collector, mowed down a large portion of the bamboo court that IBM had created to make room for meretricious, dismal, uninspired and not at all attractive contemporary art, at least in the first new installations. Furthermore, he approved the installation of a very poor and mediocre red Alexander Calder sculpture beneath the great cantilever at the corner of Madison Avenue and 57th Street.
In his book, "Privately Owned Public Spaces The New York Experience," (John Wiley & Sons, 2000), Jerold S. Kayden writes that this covered pedestrian space has garnered "near universal recognition as New York City's peerless privately owned public space, a tree-filled conservatory and public living room rolled into one."
"When the Minksoff ownership group purchased the IBM building in 1994 and applied to the City Planning Commission one year later for permission to modify the space, alarm bells sounded. Here was someone about to tamper with sacrosanct public space, something that could be tolerated only if it were conclusively demonstrated that the changes would improve existing conditions. The owner originally proposed to reduce from 11 to 5 the number of bamboo tree stands and remove the low dish planters to make physical and visual way for the indoor sculpture garden displaying large-scale artworks by major artist sof the twentieth century rotated regularly under the directionof the Pace Wildenstein Gallery. The owner also proposed to increase the amount of seating (albeit with benches substituting for some of the movable chairs), to decrease the number of movable tables, and to relocate the food kiosk from southwest to southeast corners, making it more visibile form Madison Avenue. After hearing arguments for and agaisnt the changes, and after the owner agreed to retain 8 of 11 bamboo stands, install additional movable chairs without benches, and keep the tables, thge City Planning Commission gave its approval....While Wordsworth's 'brotherhood of venerable trees' has been diminished, and the planters once filled with brightly colored azaleas, lilies, and tulips that changed with the seasons are sadly absent, sculptures by such artists as Henry Moore, Karel appel, and Alexander Calder have taken their place. Together with the Levitated Mass (1982), environmental artist Michael Heizer's sculpture in the urban plaza at the northwest corner of East 56th Street and Madison Avenue, shown below, consisting of an 11-ton stone incised with a coded building address and resting in a stainless steel basin of rushing water...,the public spaces here have become something of a public art magnet....Several other changes have occurred over the years. The IBM Gallery of Science and Art...has been replaced by the Newseum, a media museum funded by the Freedom Forum."
One might say that such art patronage was praiseworthy, but one cannot, first because the specific art is not distinguished and second because a resurrection of the former IBM gallery would have been very noble and could well have been called, proudly, the Minskoff Gallery. Of course, it still could, hint, hint.
One should not quibble too much over public art, perhaps, but here the art was being lent by local, albeit prestigious, art dealers, usurping dedicated public space that was used by the building to erect a larger structure. The new artsy atrium can be seen below.
The decision of Sony to remake the street-level spaces of the former A. T. & T. Building into commercial showcases for its products is even more blatant chutzpah and how it could have been approved by city officials makes Boss Tweed look like a saint.
By the spring of 2006, the bamboo in the atrium had shrunk markedly
By the spring of 2008, further shrinkage
While somewhat stylish, the Sony spaces enclosed the building's most of the original huge arcades that also counted heavily toward permitting the building to become much larger than its normal zoning would have permitted.
All this change, of course, merely carries on New York's infamous, chaotic tradition of change for change's sake.
Indeed, Donald Trump demolished the rather attractive Art Deco facade of Bonwit Teller, the department store, to erect Trump Tower, and moved the store into a classy, but more contemporary and sleek new building next to the IBM Building on 57th Street. The store didn't survive very long and was soon taken over by Galleries Lafayette and in 1996 Nike, the sneaker company, tore that building down to erect its own store on the site, inspired and attracted no doubt by the wild success of the Warner Bros. Studio store across the street that revitalized the neighborhood.
It is interesting to note, moreover, that this trio - the former IBM and A. T. & T. buildings and Trump Tower - is countered by another towering trio two blocks to the west. The western trio, comprised by the Metropolitan Tower, the Carnegie Hall Tower and CitySpire, was also unplanned and uncoordinated by its three separate developers. While considerably more controversial for a variety of reasons that are discussed in their individual essays in this book, the western trio, which is much more closely bunched, resonates much more like a three-pronged tuning fork than this trio anchored by the former IBM Building.
This trio is more satisfying because of the open spaces provided by the "IBM" atrium and the open rear terraces of Trump Tower. Architecturally, this trio also betters the other one, largely because two of its towers were designed as corporate showcases rather than speculative office towers, which normally are not as plush. Both trios, however, introduce to midtown much of the vertiginous ecstasy/apoplexy that heretofore was the sole domain of the financial district downtown.
Like the palm trees in the Wintergarden at the World Financial Center downtown, the bamboo trees here were doubtful survivors, but like most transplants to the city they have thrived, until Mr. Minskoff came along. This trio is also more cohesive because the former IBM was the most dignified of the lot and happens to be the shortest and at the center, an interesting reminder that mere physical dominance in height or bulk does not necessary rule.
There are six entrances at the former IBM Building: directly from the former IBM Building's cantilevered Madison Avenue and 57th Street entrance, through the building's lobby; directly from the former IBM Gallery of Arts & Sciences, now used by Freedom Forum; directly from the Nike store that was formerly the Galleries Lafayette store and originally a new Bonwit Teller in the middle of the block; and three directly from the streets. (In 1996, the building's new owners rented the former IBM corporate exhibition showroom space on 57th Street to Tourneau, a watch store, shown below, which will never match the institutional elegance of the former showroom. While its space would be impressive in another context, say a New Jersey shopping mall, here it borders on being crass. The new Nike Town store is a crowd magnet, but its high-school gym architecture is an incongruous and disappointing replacement for the original building on the site whose dark red polished granite facade was elegant and a good neighbor for IBM's polished granite facade and the fortress-like facades of Tiffany's on the other side.)
The atrium's potted plantings in the former IBM building used to be changed regularly and a handsome, circular, stainless-steel food and beverage stand made a stay in this vast skylight jungle extremely pleasurable. The New York Botanical Gardens also had a store fronting on the atrium, which was appropriate because of the atrium's lavish plantings.
A bar and smoking area would be most welcome here, but probably incorrect politically and corporately.
The zig-zag skylight is rakish, but it is a reminder of the unusual angularity of the former IBM Building, which, with the adjoining Trump Tower and the Sony Building, has transformed a rather drab great location into one of the supreme glories of New York despite the above-mentioned flaws.
The double-height office building lobby itself is minimal in size, relative to the tower, but is oriented so that clear views into the atrium can be seen from its entrance. Thanks to the high polish of its granite walls, the reflected views of the atrium between the elevator banks appears larger than the actual window openings, a rather brilliant design.
Moreover, this entrance is tucked beneath the tower's incredible cantilever at this corner. This engineering tour-de-force reportedly cost IBM an additional $10 million or so in construction costs at the time. (At the time, $10 million was not an insignificant figure.) It was considered an awkward gimmick initially, but it is very, very dramatic as befits such a prestigious corporation whose history of support of the arts had always been among the highest in the country. The cutaway corner opens unusual vistas of 57th Street between Madison and Fifth Avenues, one of the city's most elegant blocks, but the cantilever also permits the tower's form to hold to the traditional street grid. Barnes tried a variation of this cutaway for Park Tower Realty's 535 Madison Avenue office tower, a few blocks south, but there a corner column helps support the tower and interrupts, albeit fairly gracefully, its midblock plaza.
The Calder sculpture, shown above prior to the Tourneau watch store lease of the retail space to the west in the building that fussified its appearance, just sits plunk and ungracefully beneath the cantilever and directly in front of the entrance. While it certainly is not as bad as the wall Richard Serra controversially erected some years before in the plaza of the Federal Office Building on Foley Square in Lower Manhattan, it detracts from the awesomeness and daring of Barnes's design. It's hokey and not elegant. It's just plain ugly in its execution.
The IBM tower's angled facade facing southwest not only gives it workers unusual vistas but also opens up views of the nearby Trump and Sony towers. Furthermore, the IBM tower's highly polished and flush granite facades lessen the visual impact of such a large building and presents a very sleek image.
The southeast corner street entrance to the atrium is setback to permit a marvelous horizontal fountain, shown above, by sculptor Michael Heizer that is one of the best new works of public art in the city in a generation. The stainless steel base of the fountain, in which water rushes horizontally, contains a large granite sculpture that the artist designed as a "lineal code" to denote the location by assigning numbers to the alphabet and then spelling out, in code, MAD and 56.
According to Margot Gayle and Michele Cohen in their excellent book, "The Art Commission and the Municipal Art Society Guide to Manhattan's Outdoor Sculpture," Heizer's carving atop the granite boulder "suggest Egyptian rock gravure and American Indian petroglyphs," even if less casual observers might construe them as an abstract representation of a microchip that seems to hover over a torrent of rapids.
The angle of the tower is recalled in the angled sidewalk lobby of the building's former gallery space as well as the sidewalk piers of the tower, an especially nice and unusual touch.
The former gallery's lobby is large, simple and efficient with a broad staircase and a large elevator leading to the galleries downstairs, which expand under the entire site and had the highest record of consistently interesting and wonderfully installed exhibitions of any art institution in the city. Excellent public restrooms are located on the lower level here. The gallery alone would have earned plaudits for this project, which is the best and only good thing IBM has done since the introduction of its personal computer in 1981.
Some purists may never forgive IBM for not making its tower out of lapis lazuli to conform with its nickname of "Big Blue." Perhaps someday they will erect a blue skyscraper, but inasmuch as this was not even its corporate headquarters, nay, not even, a summer residence, this green giant will do very nicely indeed.
John Chamberlain's "The Hedge" is exhibited in bamboo atrium in October, 2000
The former IBM building is too stark, bulky, overwhelming and almost too razor-sharp to be a masterpiece. Yet its combination of robust solidity and strength, high degree of finish and fine materials, and unusual form and superb public amenities make it a subtle, sophisticated modern marvel of urbanity.
In 2008, the museum-like space was taken over by Bonham's, an auction house.


A picture and words presentation was created by local people involved in the project to build a new hall. This gives a brief history of the original village hall and the work involved by the community to create a new facility. It runs for about 20 minutes and tells the story from 1920 up until the first birthday of the new hall in December 2011.
This video is hosted on YouTube. Click on the small picture below to take you directly to YouTube where you can see the presentation. Turn your sound up!


Why am I so conflicted about ATGATT?
ATGATT, or All The Gear All The Time, is the credo of many motorcyclists. As a bare minimum it consists of a helmet, a good riding jacket – preferably leather, eye protection, jeans, solid boots and gloves. At the extreme it also includes armoured jackets and pants, da-glo green jackets or vests, and reflective tape sewn or glued onto every available surface – everything but a cabin surrounding the rider and passenger. Riding while wearing a do-rag, shorts, t-shirt and sandals does not meet the minimum standard. Nor does this Yamaha-riding-mankini-clad guy.
There are legitimate arguments to be made for any one of a long list of safety-related gear, all based on the assumption that the rider will (not "if", but "will") get in an accident and therefore should be protected – for his (or her) own sake, for the sake of his/her family, for the sake of the medical/insurance companies, and even for the sake of the taxpayer who may end up having to support a vegetable for years to come.
But there are also counter arguments, mostly frivolous but some that credibly posit that all that safety gear just make us feel more invincible and therefore more likely to push the boundaries. Apparently humans are hard-wired to need a certain degree of risk in their lives. Everyone's threshold is different, but what seems to happen is that if we drop below our own risk threshold we tend to then engage in increasingly risky endeavours until our overall risk exposure levels are again in equilibrium. (See Wikipedia: Risk Homeostasis.) Hence more protection = more risky behaviour, and less protection = more cautious behaviour.
That's certainly true in my case. I used to be an ATGATT guy, especially during the years when I was teaching motorcycle safety courses – it just wouldn't do to be seen by a student riding in jeans and a t-shirt when mandating full protection for them. But recently I've found myself relaxing my previously non-negotiable standards. Now if I am just going for a short putt over to the golf course (20 miles) on a hot day I may eschew the gloves and jacket and just wear a golf shirt, jeans and sneakers, or a light windbreaker. If I'm going for a longer ride involving temperature changes, possibly some bad weather, and maybe some twisty roads or high-speed highways I'm more likely going to put on all the gear, including wearing my full face helmet. And what's interesting is seeing how I (instinctively?) change my riding style when so attired. I know for certain that I will ride more aggressively and faster when wearing full gear. It's not a conscious decision and the thought process is not "I will be riding hard therefore I will wear all the gear". It's quite the reverse, with the clothing dictating the riding style, almost like the way the speed creeps up on you when you're listening to a good road song on the radio – it just seems natural.
Any of my former students would find it hard to believe I would ever feel comfortable riding in just jeans and a t-shirt but I have, belatedly, discovered there are times when it is right for me. Is it riskier? Certainly, when factors outside one's own control are considered. But if I wanted to avoid all possible risk in my life I'd wear my helmet while driving the car, hang a life vest on the bathtub, sell my chain saws, and die of sheer and utter boredom years before my time.
No thanks. I'll take my chances and wear what makes me comfortable.
I hadn't seen Charles for a few years. We used to ride together back in the 80's but then he got married, stopped riding and we drifted apart. Then just recently I heard through a mutual friend that Chucky was back on two wheels although his wife was not too pleased with his, as she called it, "midlife crisis".
At any rate I gave him a call and we met for a ride for old time's sake.
One of our favourite routes back then was highway 511 up through Calabogie (which I've blogged on here), so it seemed fitting we'd do that loop. After meeting up at the Timmy's in Arnprior we headed west over to Calabogie and then across to Perth (Ontario) on the almost-world-famous highway 511. Then it was back north through Carleton Place, Almonte, and back to Arnprior where we stopped at the local pub for a bite and a pint as it was now about 2 PM. Over a late lunch we caught up on the last 20+ years, and then the conversation naturally turned to motorcycles and Charles' new acquisition, a 2009 Fat Boy.


Jasmine has long been loved for its wonderful scent. This climbing plant blooms with one of the most aromatic flowers in the garden.
The jasmine plant was first introduced in Europe in the 16th century where it quickly gained immense popularity because of its scent. French perfumers especially took an interest this lovely climbing plant.
In addition to its scent, the jasmine plant also has healing properties. It is also used as a well-known cleansing remedy. In China, Jasmine tea has been a long-standing healing favorite. The taste of the jasmine plant is alternately described as astringent, pungent, bitter, and slightly cooling.
The jasmine plant contains alkaloids, including linalool. Jasmine also contains salicylic acid, which is the active component of aspirin.
The jasmine plant has many actions attributed to it. Its flowers have been known as an aphrodisiac, an astringent, a bitter but relaxing nervine, an analgesic, a sedative, and a plant which helps encourage milk flow. The essential oil derived from the jasmine plant is thought to operate as an antidepressant, an antiseptic, an antispasmodic, an aphrodisiac, a sedative, and a uterine tonic.
There are two main components that are used from the jasmine plants: its flowers, and its essential oil. The jasmine plant flowers have been used in Ayurvedic medicine for hundreds of years. In Ayurvedic medicine, the jasmine flowers are known as jati, and it is regarded as a sattvic tonic, which encourages the principles of light, harmony, and increased perception, all principles that are associated with sattvic, which is one of the three qualities of health in traditional Ayurvedic medicine. The sattvic element of the jasmine flower is also thought to emphasize the nature of love and compassion. The jasmine flowers are also thought to work as a mild aphrodisiac for women. Jati is also used in traditional Ayurvedic medicine to reduce fevers and to fortify the immune system.
The flowers of the jasmine plant are also used to make an aromatic tea. The Chinese have been using Arabian jasmine since at least AD 300 to scent teas. The flowers of the Arabian jasmine plant are known in China as mo li, and they are highly regarded in China as a scenting agent. In traditional Chinese medicine and practice, the Arabian jasmine flowers were placed alongside heat-dried green tea so that the green tea would absorb the scent of the jasmine flowers. These days, commercial tea makers simply mix the jasmine flower petals with the regular tea.
Jasmine tea infusions are recommended for treating infections, urinary inflammation and fevers, much as aspirin are used to reduce pain and fevers. The jasmine flowers can be combined nicely with lemon balm or skullcap to create a calming, relaxing tea. A wash made from infused jasmine tea flowers can also be used to bathe scrapes and cuts. Jasmine flower compresses can also be made to treat heat stroke, headaches, or anxiety. Massage oil can also be created by diluting jasmine oil with almond oil an applying to the skin.


text:
LexRoll.com Home
LexRoll.com Connecticut
Category: Connecticut Superior Court Opinions
/Connecticut Superior Court Opinions /
ZONA v. ADMINISTRATOR, No. 29 24 01 (Dec. 27, 1991)
ZONA v. RIVERS, No. CV 96-0382344 (Oct. 22, 1998)
ZONING B. OF A./TOWN OF PLAINFIELD v. FOIC, No. CV 99 0497917S (May 3, 2000)
ZONING COMMISSION, COLUMBIA v. FORNAL, No. CV 92 50482 S (Aug. 19, 1992)
ZONING COMMISSION v. LENINSKI, 34 Conn. Sup. 66 (1976)
ZONING INSPECTOR, REDDING v. STERGUE, No. 30 63 19 (Feb. 24, 1993)
ZONING INSPECTOR, REDDING v. STERGUE, No. 30 63 19 (Mar. 24, 1994)
ZONING INSPECTOR, TOWN OF REDDING v. STERGUE, No. 306319 (Jul. 7, 1992)
ZONING INSPECTOR v. PLUNSKE, No. 30 44 66 (Aug. 7, 1995)
ZOOLOGICAL RESEARCH v. CRABTREE-HAAS, No. CV870238016S (Sep. 16, 1992)
ZOPFI v. STATE, No. CV 05 5000068 S (May 15, 2007)
ZORAVALI v. WARDEN, No. CV 94 1958 S (Feb. 28, 1996)
ZORDAN v. ZORDAN, No. FA 03 90867 (Jan. 14, 2005)
ZORICK v. SCHWARTZ, No. CV 96 056 58 14 (Jul. 19, 1999)
ZORN v. CREDO HOUSING DEVELOPMENT CORP., No. CV98-0145550S (Sep. 23, 1998)
ZOTT v. CHANNEY, No. CV02-0067995 (May 31, 2002)
ZOTTER v. ZOTTER, No. CV00-0502717S (Apr. 16, 2002)
ZOTTI v. MARLOW, No. CV98-0486285S (Nov. 4, 1999)
ZOTTO v. CHIARELLA, No. FA99-0156076S (Aug. 10, 2000)
ZOTTO v. MARJANI, No. 094838 (Jul. 23, 1993)
ZOTTOLA v. MILLER, No. HHB CV05-4008311 S (Jan. 31, 2006)
ZUB-ZDANOWICZ v. FAHEY, No. FA91-0099996S (Apr. 13, 2005)
ZUBA v. TOWN OF NEW, MILFORD, No. CV 94 0065903 (Nov. 29, 1995)
ZUBER v. ANSONIA ZBA, No. CV07 400 85 78S (Mar. 6, 2009)
ZUBERI v. WARDEN, No. CV 09 4003118S (Apr. 15, 2011)
ZUBLENA v. CARROZZO, No. CV 01 0084267S (May 20, 2002)
ZUBOFF v. ZUBOFF, No. FA 06-4023805 (Sep. 21, 2007)
ZUCCARELLI v. COHAN, No. 0050212 (Dec. 19, 1990)
ZUCCARELLI v. COHAN, No. 050212 (Mar. 25, 1991)
ZUCCARELLI v. COHAN, No. 50212 (Apr. 18, 1991)
ZUCCARELLI v. N. AMERICAN HOLDING CORP., No. 0054504 (Apr. 2, 1991)
ZUCCARELLI v. SCHLOTT, No. 0049553 (Aug. 16, 1990)
ZUCCARI v. ANTARES YALE TOWNE SPE, No. X08 CV06-5002096S (Jul. 22, 2008)
ZUCCARI v. ANTARES YALE TOWNE SPE, No. X08 CV06-5002096S (Jun. 12, 2009)
ZUCCARO v. ZUCCARO, No. 0058468 (Jul. 20, 1993)
ZUCCO v. ZUCCO, No. FA00 0176262 S (Aug. 13, 2001)
ZUCK v. AMERICAN ECONOMY INSURANCE CO., No. CV95 032 34 67 (Nov. 29, 1995)
ZUCKERMAN v. O.E.M. OF CONNECTICUT, INC., No. CV98 06 37 95 (Nov. 4, 1998)
ZUCKERMAN v. ZUCKERMAN, No. CV00 0071541S (Mar. 17, 2003)
ZUERBLIS v. SILVA, No. 398663 (Jun. 18, 1992)
ZUILKOWSKI v. GILBERT, No. FA10-4011416-S (Jul. 26, 2010)
ZUJEWSKI v. ALLEN, No. CV90 03 15 90 (Jul. 16, 1990)
ZUK v. STATE, 37 Conn. Sup. 88 (1981)
ZUKAUSKAS v. FANDACONE, No. CV 90-0439604S (Nov. 6, 1990)
ZUKAUSKAS v. SCVUCKA, No. CV 06-5000843 S (Aug. 2, 2006)
ZUKOWSKI (CASSELLA) v. ZUKOWSKI, No. FA 96-0393453S (Dec. 14, 2001)
ZUKOWSKI v. JE MECHANICAL SERVICES, INC., No. 554570 (Sep. 24, 2001)
ZULAWSKI v. STANCIL, No. CV05 00 02 03S (Jul. 14, 2006)
ZULFI v. ADMINISTRATOR, UNEM., No. CV 06-401 41 99 S (Dec. 29, 2006)
ZULIANI v. CHIPPERINI, No. 07 88 63 (Oct. 12, 1990)
ZULICK v. PATRONS MUTUAL INS. CO., No. CV 04 0072605 (Dec. 21, 2005)
ZULLO v. ADMIN., UNEMPLOYMENT COMP. ACT, No. CV 96 0154421 (May 9, 1997)
ZULLO v. ADMINISTRATOR, UNEMP. COMP. ACT, No. CV 05 4002700S (Oct. 4, 2006)
ZULLO v. CONNECTICUT BUSINESS INSTITUTE, No. CV 920298163 (Jul. 14, 1995)
ZULLO v. OCALEWSKI, No. FA 06-4020422S (Apr. 2, 2007)
ZULLO v. TREAT, 13 Conn. Sup. 275 (1945)
ZULLO v. ZULLO, 17 Conn. Sup. 325 (1951)
ZUNDA v. HESS CONSTRUCTION & RENOVATION, No. FST-CV-11-6010837S (2012)
ZUPANIOTIS v. COMMISSIONER OF TRANS., No. CV 01 018 5037 (Dec. 31, 2002)
ZUPANIOTIS v. COMMISSIONER OF TRANSP., No. CV01 0185037 (Oct. 9, 2002)
ZUPANIOTIS v. COMMISSIONER OF TRANSP., No. CV01 0185037 S (Jan. 14, 2003)
ZUPANIOTIS v. COMMISSIONER OF TRANSP., No. CV01 0185037 S (Mar. 18, 2003)
ZUPNIK v. DAY PUBLISHING COMPANY, No. CV 95 0549864 (Mar. 8, 1996)
ZURA v. ZURA, No. FA 98-68127 (Dec. 12, 2000)
ZURICH AM. INS. v. LIBERTY MUT. INS., No. X07-CV03 0084312S (Jul. 16, 2004)
ZURICH INSUR. v. LET THERE BE NEON CITY, No. CV 02-0463606 (Nov. 20, 2002)
ZURKUS v. TOWN OF BRANFORD, No. CV94 0361741 (Nov. 22, 1994)
ZURLIS v. SAFECO INSURANCE CO., No. 0115294 (Nov. 7, 1994)
ZURLO v. ZURLO, No. FA 01 045531 (Sep. 6, 2002)
ZUROLO v. AETNA CASUALTY SURETY CO., No. CV 93-0344272 (Jul. 12, 1994)
ZUROLO v. ZUROLO, No. FA90 0300206S (Jan. 8, 2009)
ZURZOLA v. DANBURY HOSPITAL, No. CV02-0347228S (Dec. 17, 2003)
ZWEERES v. MILFORD ZBA, No. CV05-4003144S (Jan. 29, 2007)
ZWEERES v. PASHALINSKY, 7 Conn. Sup. 4 (1939)
ZWEERES v. PASHALINSKY, 7 Conn. Sup. 45 (1939)
ZWEERES v. ZBA, No. CV03-0082790S (Feb. 9, 2005)
ZWEYGARTT v. GRAY, 8 Conn. Sup. 506 (1940)
ZWEYGARTT v. GRAY, 9 Conn. Sup. 7 (1940)
ZWICK v. MAY DEPARTMENT STORES COMPANY, No. CV-02-0174593S (Aug. 18, 2004)
ZWICKER v. SABETTA, No. CV07-5008853S (Feb. 1, 2008)
ZWINGMAN v. DEGRAFF, No. 30 58 24 (Feb. 8, 1991)
ZWINGMAN v. ZWINGMAN, No. CV 04-4000982 S (Jun. 15, 2007)
ZYCH v. BOEHRINGER INGELHEIM PHARMACEUTICALS, No. 31 33 77 (May 28, 1997)
ZYCK v. WALTER, No. FA 94-0356819 (Nov. 22, 1994)
ZYGMONT v. STAMFORD HEALTH SYSTEMS, INC., No. CV 00 0176423 (Nov. 30, 2000)
ZYKLA v. FREYER, 38 Conn. Sup. 655 (1983)
ZYMOL ENTER. v. SHEPPARD, MULLIN, No. CV03 0102646 S (Dec. 24, 2003)
ZYSK v. ZYSK, No. 0117108S (May 11, 2001)
ZYSK v. ZYSK, No. 0117108S (Sep. 18, 2001)
ZYWNO v. CIAMPI, No. 120205 (Oct. 20, 1994)
ZYWNO v. CIAMPI, No. CV94-0120205S (Feb. 27, 1998)
ZYWOCINSKI v. LUNA, No. CV 99 0425067 S (Jan. 22, 2002)
← Newer Entries
«‹803804805
Copyright © 2016-2017 LexRoll.com, Inc.


Made up of lace applique that resemble a bed of rose petals, the Lyric Gown's sweetheart bodice is mesmerising. The floral ornaments overflow from the bodice up the deep v back as well as into the invisible tulle skirt. Finished with a billowing tulle train, Lyric is an enchanting choice.


I remember being dazzled by all the 'client getting' strategies and systems, funnels and formulas being touted to coaches and consultants when I was looking for answers to the burning question 'How can I attract clients into my coaching business?' We are bombarded with information and shiny offers that can quite literally drive any self-respecting coach to the bottom of a family sized tub of Ben and Jerrys' (as an answer to overwhelm? Not recommended).
But, when you are not making money in your business and you are stuck on your next move (read: waking up scared witless at 3am), it's easy to be swayed this way, and that, by impressive marketing. You would be forgiven for getting swept up and excited by the success stories and the apparent ease with which you can achieve fast and fantastic results. It certainly got me, more than once.
In those early days I invested in courses and programmes that I'd start off excited about but then, without knowing why, I'd fail to follow through on them or if I did do everything I was 'supposed to do' I still didn't get the results. The outcome was increasingly frustrating as I dove deeper into debt and seemed no further forward.
Sanae is a certified business and sales coach for female coaching entrepreneurs. Certified Trainer in The Canfield Success Principles ™; Personal Performance Coaching Diploma and Corporate and Executive Coaching Diploma.
In 2015, Sanae started her on-line Coaching business, after a 16-year career in corporate management and sales. During that time, she has launched multiple 1-2-1 and group coaching programmes that have helped hundreds of women coaches from around the world achieve breakthrough success in their own coaching businesses.


We've all been there, wondered just exactly where our period has gone to and and wondered if possibly, even though the chances are slim, if we're pregnant. There are though many more reasons behind an absent or late period than having a bun in the oven – so before you panic and think 'why is my period late?' check out our definitive late period list!
Don't worry if you've had a major blow out at Pizza Express, a few pounds is unlikely to affect your periods, however, losing or gaining a lot of weight can stop them in their tracks. You need a certain amount of body fat to ovulate so if this drops drastically, ovulation – and your period – will stop. On the other hand, excess fat cells can raise oestrogen levels, which can stop your body from releasing an egg and therefore stop your periods.
Taking a weekly Zumba class is unlikely to affect your cycle, but if you're training for a big event such as a marathon, then your period might suddenly become a tad more elusive. Major work-out sessions require a lot of energy and so to conserve this, your body will start to 'switch off' non-essential functions such as making babies – so it's goodbye to your period. As soon as you take your foot off the exercise pedal though, your periods should return to normal.
Antibiotics can muck up the hormones you produce in order to have a period. Some antibiotics hinder oestrogen production, and if this is too low then your body doesn't produce the hormones that stimulate your ovaries to release an egg, meaning no period – or a very delayed one.
We're talking about big-times stresses here such as the death of a loved one or a job loss, as opposed to the daily niggles of life. Stress can stop or delay your periods because it affects the part of the brain responsible for producing hormones essential for reproduction and your period. Once these hormone levels are out of kilter, the frequency and length of your period can change.
The sniffles won't delay your period but being properly poorly with the flu or a tummy bug can throw your cycle off track. Your body is a clever thing and if it thinks you're too ill to get pregnant, then it may delay ovulation meaning your period may come later, earlier or not at all that month.
If you've been on the pill for a while and suddenly stop taking it, don't expect your periods to return to normal straight away. It could take up to 6 months for your period to return – if yours is still missing after this, pay a visit to your GP so they can rule out any other issues.
Some women have found that taking anti-depressants can play havoc with their periods. The reason why this happens isn't really known, however some research suggests it's all down to the affect serotonin might have on hormones.
There are various conditions such as PCOS, endometriosis, as well as thyroid conditions that can affect your cycle. It may mean you get periods irregularly or not at all, but if your periods have been giving you the run around for a while, it's always best to see your GP who can then run a variety of tests to see what might be wrong.
Did you know that almost one in 10 women go through premature menopause before they hit 40? As well as absent or irregular periods, symptoms include hot flushes, night sweats, disturbance in sleep and also the delight of vaginal dryness. If this sounds like you, book into to see your GP who can talk you through treatment options and advise on lifestyle tweaks.
Some research has found a link between shift work and irregular periods. The results of a UK study found that women who worked shifts were 33% more likely to have menstrual problems. While the reason behind this isn't really known, researchers have speculated that shift work can affect the body's everyday rhythm and so affect fertility and the menstrual cycle.
If your periods have stopped altogether read four reasons your period has stopped. If you're thinking of delaying your period, read is it safe to delay your period?


text:
Drunk pub chef drove into lamp post
North Devon Magistrates Court, Barnstaple - Credit: Archant
The 32-year-old received a lengthy driving ban after deciding to drive home from the pub when more than twice the legal limit.
A PUB chef has pleaded guilty to drink driving after drinking cider and shandies then driving his car into a lamp post.
Darren Baddick, of Strand Lane, Ashford, escaped with minor injuries after he decided to drive home from the pub in Braunton on May 13.
The 32-year-old's Vauxhall Astra van was written off after it collided with a lamp post at the entrance of Chivenor Caravan Park.
Police arrived at the scene and arrested Baddick after he blew a positive breath test.
In custody, he was found to be more than twice the legal limit and admitted he had drunk three-to-four pints of cider followed by three-to-four cider shandies.
He said he went to his vehicle after playing snooker all evening to get a coat so he could walk home, but then decided to drive.
8 SWW warns: 'Don't be frozen out'
9 'What a Beautiful Noise' takes to Queens stage
10 Young Jack strides out again for charity
Zara Svensson, defending, said Baddick admitted the alcohol clearly contributed to accident and wouldn't have occurred otherwise.
She said Baddick could not explain why he had decided to drive home, as he normally would have made other arrangements.
Magistrates disqualified Baddick from driving for two years and ordered him to undertake 60 hours of unpaid work.
He was also ordered to pay £85 in costs and a £60 victim surcharge.


text:
Salomon Wininger (* 13. Dezember 1877 in Gurahumora, Österreich-Ungarn; † 23. November 1968 in Ramat Gan, Israel; auch Schlomo oder Solomon Winninger) war ein österreichisch-israelischer Lexikograph, der mit seiner Großen Jüdischen National-Biographie das bisher umfangreichste bio-bibliographische Personen-Nachschlagewerk zum Judentum zusammenstellte.

Leben
Salomon Wininger war von 1910 bis in die Zeit des Ersten Weltkriegs als österreichischer Postbeamter in Czernowitz tätig. Während des Weltkriegs hielt er sich in Wien auf und kehrte dann nach Czernowitz zurück.

Ab 1907 widmete er sich – neben seiner Berufstätigkeit – der Arbeit an der "Großen Jüdischen National-Biographie". Das von ihm ebenfalls zusammengestellte biographische Lexikon "Sefer Ishim Zionim" (Buch der zionistischen Männer) mit rund 17.000 Einträgen wurde nie veröffentlicht. Das Manuskript befindet sich in der Jüdischen National- und Universitätsbibliothek in Jerusalem. Er gründete zahlreiche Wohlfahrtsvereine und Volksküchen sowie die Bukowiner Pensionistenvereinigung für Staatsbeamte.

Wininger überlebte die Zeit des Holocaust in Czernowitz und emigrierte 1951 nach Israel, wo er zunächst in Jerusalem ansässig war. Ab 1955 lebte er in einem Altersheim in Netanja, später in Ramat-Gan.

Große Jüdische National-Biographie

Wininger begann im Jahr 1907 mit der Arbeit an der Großen Jüdische National-Biographie mit mehr als 8000 Lebensbeschreibungen namhafter jüdischer Männer und Frauen aller Zeiten und Länder – Ein Nachschlagewerk für das jüdische Volk und dessen Freunde in sieben Bänden (Cernăuţi 1925–1936). Er nannte sie den Versuch der Schaffung eines "Monumentum Judaici nominis, ein Denkmal des jüdischen Namens und Volkes, seines Geistes und seines Schaffens". Sie enthält rund 13.000 mehr oder weniger ausführliche "Lebensbeschreibungen namhafter jüdischer Männer und Frauen aller Zeiten und Länder", worin auch getaufte Juden und Jüdinnen enthalten sind. Es ist bisher eines der umfassendsten – wenn nicht das umfassendste – Werk dieser Art. Das Nachschlagewerk enthält ein Vielfaches des Materials verglichen mit Adolph Kohuts (1848–1917) Zusammenstellung "Berühmte israelitische Männer und Frauen in der Kulturgeschichte der Menschheit. Lebens- und Charakterbilder aus Vergangenheit und Gegenwart" (2 Bände, Leipzig 1900/01), die überdies häufiger ungenauer und fehlerhafter ist als Winingers Kompilation.

Von seiner grundsätzlichen Anlage und Motivation her apologetisch und in manchen Einzelheiten nicht frei von Fehlern, ist Winingers "National-Biographie" im Allgemeinen eine immense Materialsammlung, die sonst in weiten Teilen verlorene Kenntnisse der jüdischen Kultur- und politischen Geschichte aufbewahrt.

Winingers Werk wurde, wenngleich spät, maßgeblich vorangebracht durch die von Carl Steininger in Dresden ab 1914 angelegte Sammlung von ca. 1 Million Ausschnitten aus mehreren Hundert verschiedenen Zeitungen und Zeitschriften "in den meisten lebenden Sprachen" des In- und Auslandes. Der Nicht-Jude Steininger (Prokurist der Dresdner Bank, geb. 1876 in Salzburg) hatte ausschließlich Material zu jüdischen Persönlichkeiten und Themen gesammelt.

Die finanziellen Mittel für die Drucklegung des seit Jahren fertigen, aber unveröffentlichten Werks stellte Jakob Fallenbaum (geb. 1889 in Czernowitz), ein "Fabriksbesitzer zu Chemnitz in Sachsen", zur Verfügung. Die Bände 1–5 wurden von der Druckerei "Orient", die Bände 6 und 7 von der Druckerei "Tipografia ARTA" (F. Weiner-Ernst) in Czernowitz hergestellt.

 Band: "Abarbanel – Ezobi" (richtig: Czernowitzer). 1925, 638 S.; Digitalisat der Goethe-Universität Frankfurt/M.
 Band: "Dafiera – Harden". 1927, 635 S.; Digitalisat der Goethe-Universität Frankfurt/M.
 Band: "Harischon – Lazarus". 1928, 639 S.; Digitalisat der Goethe-Universität Frankfurt/M.
 Band: "Leavith – Péreire". 1930, 637 S.; Digitalisat der Goethe-Universität Frankfurt/M.
 Band: "Pereira – Steinhaus". 1931, 637 S.; Digitalisat der Goethe-Universität Frankfurt/M.
 Band: "Steinheim – Zweig". – Nachtrag: "Abarbanel – Van Geldern". 1932, 639 S.; Digitalisat der Goethe-Universität Frankfurt/M.
 Band: Nachtrag 1: "Ge – Schluss". – Nachtrag 2: "A – Z". – Anhang. 1936, 667 S.; Digitalisat der Goethe-Universität Frankfurt/M.

Aus dem Vorwort
Im Vorwort (Czernowitz 1925) schreibt Wininger u. a.:

Literatur
 Encyclopaedia Judaica. Vol. 16. Keter, Jerusalem o. J. (1971). Sp. 549.
 Susanne Blumesberger, Michael Doppelhofer, Gabriele Mauthe: Handbuch österreichischer Autorinnen und Autoren jüdischer Herkunft 18. bis 20. Jahrhundert. Band 3: S–Z, Register. Hrsg. von der Österreichische Nationalbibliothek. Saur, München 2002, ISBN 3-598-11545-8, S. 1483.
 Hugo Gold: Geschichte der Juden in der Bukowina. Edition Olamenu, Tel Aviv 1962 (Band 2).
 Renate Heuer: Bibliographia Judaica. (Band 3, S–Z), Campus, Frankfurt am Main 1988, ISBN 3-593-33398-8.
 D. Lazar: Nachruf in Ma'ariv  vom 20. Dezember 1968.
 Walter Tetzlaff: 2000 Kurzbiographien bedeutender deutscher Juden des 20. Jahrhunderts. Askania, Lindhorst 1982, ISBN 3-921730-10-4.
 Kurt Schubert (Hrsg.): Zur Geschichte der Juden in den östlichen Ländern der Habsburgermonarchie (= Studia Judaica Austriaca, Band 8). Edition Roetzer, Eisenstadt 1980, ISBN 3-85374-071-5.
 Evelyn Adunka: Salomon Wininger. Über den vergessenen Verfasser der "Großen Jüdischen National-Biographie". In: Mnemosyne. ZEIT-Schrift für jüdische Kultur, Heft 26/2000, Alekto, Klagenfurt 2000, , S. 109–118.

Weblinks

Einzelnachweise

Lexikograf
Lexikon oder Enzyklopädie (Judentum)
Person des Judentums (Czernowitz)
Person des Judentums (Rumänien)
Person (Kronland Bukowina)
Österreichischer Emigrant in Israel
Österreicher
Rumäne
Israeli
Geboren 1877
Gestorben 1968
Mann


Publisher: Pub. for the Columbia university press, The Macmillan company.
The Download Library service executes searching for the e-book "Municipal problems" to provide you with the opportunity to download it for free. Click the appropriate button to start searching the book to get it in the format you are interested in.


text:
#include "FuelVM.h"
#include "codegen.h"

#ifdef __cplusplus
extern "C" {
#endif

DEF_ARRAY_OP_NOPOINTER(BlockPtr);
DEF_ARRAY_OP_NOPOINTER(INodePtr);
typedef ARRAY(INodePtr) INodeList;
/* ------------------------------------------------------------------------- */
static void Block_addPred(Block *BB, Block *Pred)
{
	ARRAY_add(BlockPtr, &BB->preds, Pred);
}

static void Block_addSucc(Block *BB, Block *Succ)
{
	ARRAY_add(BlockPtr, &BB->succs, Succ);
}

static void RemoveEdge(Block *To, Block *From)
{
	BlockPtr *x;
	unsigned i;
	FOR_EACH_ARRAY_(To->succs, x, i) {
		if(*x == From)
			break;
	}
	ARRAY_RemoveAt(BlockPtr, &To->succs, i);
	FOR_EACH_ARRAY_(From->preds, x, i) {
		if(*x == To)
			break;
	}
	ARRAY_RemoveAt(BlockPtr, &From->preds, i);
}

static void AddEdge(Block *To, Block *From)
{
	Block_addSucc(To, From);
	Block_addPred(From, To);
}

/* ------------------------------------------------------------------------- */
/* Replace/Remove API */
static void ReplaceValue(INode **NodePtr, INode *oldVal, INode *newVal)
{
	if((*NodePtr)->Id == oldVal->Id) {
		*NodePtr = newVal;
		newVal->Parent = oldVal->Parent;
	}
}

static void ReplaceArrayElementWith(INodeList *List, INode *oldVal, INode *newVal)
{
	INodePtr *x, *e;
	FOR_EACH_ARRAY((*List), x, e) {
		ReplaceValue(x, oldVal, newVal);
	}
}

static void ReplaceOldValueWith(INode *Node, INode *oldVal, INode *newVal)
{
#define CASE(KIND) case IR_TYPE_##KIND:
	switch(Node->Kind) {
		case IR_TYPE_IConstant:
		case IR_TYPE_IArgument:
			break;
		CASE(IField) {
			IField *Inst = (IField *) Node;
			switch(Inst->Op) {
				case GlobalScope:
				case EnvScope:
				case FieldScope:
					ReplaceValue((INode **)&(Inst->Node), oldVal, newVal);
					break;
				case LocalScope:
					break;
			}
			break;
		}
		case IR_TYPE_INew:
			break;
		CASE(ICall) {
			ReplaceArrayElementWith(&((ICall *)Node)->Params, oldVal, newVal);
			break;
		}
		CASE(IFunction) {
			IFunction *Inst = (IFunction *) Node;
			ReplaceValue(&(Inst->Func), oldVal, newVal);
			ReplaceValue(&(Inst->Env), oldVal, newVal);
			ReplaceValue(&(Inst->Method), oldVal, newVal);
			break;
		}
		CASE(IUpdate) {
			IUpdate *Inst = (IUpdate *) Node;
			ReplaceValue((INode **)&(Inst->LHS), oldVal, newVal);
			ReplaceValue((INode **)&(Inst->RHS), oldVal, newVal);
			break;
		}
		CASE(IBranch) {
			ReplaceValue(&((IBranch *) Node)->Cond, oldVal, newVal);
			break;
		}
		CASE(ITest) {
			ReplaceValue((INode **)&((ITest *) Node)->Value, oldVal, newVal);
			break;
		}
		CASE(IReturn) {
			IReturn *Inst = (IReturn *) Node;
			if(Inst->Inst) {
				ReplaceValue(&Inst->Inst, oldVal, newVal);
			}
			break;
		}
		case IR_TYPE_IJump:
		case IR_TYPE_ITry:
			break;
		CASE(IThrow) {
			ReplaceValue(&((IThrow *)Node)->Val, oldVal, newVal);
			break;
		}
		CASE(IYield) {
			ReplaceValue(&((IYield *) Node)->Value, oldVal, newVal);
			break;
		}
		CASE(IUnary) {
			ReplaceValue(&((IUnary *) Node)->Node, oldVal, newVal);
			break;
		}
		CASE(IBinary) {
			IBinary *Inst  = (IBinary *) Node;
			ReplaceValue(&(Inst->LHS), oldVal, newVal);
			ReplaceValue(&(Inst->RHS), oldVal, newVal);
			break;
		}
		CASE(IPHI) {
			ReplaceArrayElementWith(&((IPHI *)Node)->Args, oldVal, newVal);
			break;
		}
		default:
			assert(0 && "unreachable");
#undef CASE
	}
}

static void ReplaceValueWith(FuelIRBuilder *builder, INode *oldVal, INode *newVal)
{
	BlockPtr *x, *e;
	oldVal->Unused = 1;
	FOR_EACH_ARRAY(builder->Blocks, x, e) {
		INodePtr *Inst, *End;
		FOR_EACH_ARRAY((*x)->insts, Inst, End) {
			ReplaceOldValueWith(*Inst, oldVal, newVal);
		}
	}
}

/* ------------------------------------------------------------------------- */
/* RemoveDuplicatedConstantInBasicBlock */
#ifdef USE_RemoveDuplicatedConstantInBasicBlock
static void AddConstantListIfNotDefined(FuelIRBuilder *builder, INodeList *ConstList, IConstant *newVal)
{
	INodePtr *x, *e;
	FOR_EACH_ARRAY(*ConstList, x, e) {
		IConstant *Inst = (IConstant *) *x;
		if(ToINode(Inst)->Type == ToINode(newVal)->Type &&
				Inst->Value.bits == newVal->Value.bits) {
			ReplaceValueWith(builder, (INode *) newVal, (INode *) Inst);
			return;
		}
	}
	ARRAY_add(INodePtr, ConstList, (INode *) newVal);
}

static void RemoveRedundantConstants(FuelIRBuilder *builder)
{
	BlockPtr *x, *e;
	INodeList ConstList;
	ARRAY_init(INodePtr, &ConstList, 0);
	FOR_EACH_ARRAY(builder->Blocks, x, e) {
		INodePtr *Itr, *End;
		ARRAY_clear(ConstList);
		FOR_EACH_ARRAY((*x)->insts, Itr, End) {
			IConstant *Inst;
			if((Inst = CHECK_KIND(*Itr, IConstant))) {
				AddConstantListIfNotDefined(builder, &ConstList, Inst);
			}
		}
	}
	ARRAY_dispose(INodePtr, &ConstList);
}
#endif

/* ------------------------------------------------------------------------- */
/* FoldStdCall */
#define __Add(LHS, RHS)    ((LHS) + (RHS))
#define __Sub(LHS, RHS)    ((LHS) - (RHS))
#define __Mul(LHS, RHS)    ((LHS) * (RHS))
#define __Div(LHS, RHS)    ((LHS) / (RHS))
#define __Mod(LHS, RHS)    ((LHS) % (RHS))
#define __LShift(LHS, RHS) ((LHS) << (RHS))
#define __RShift(LHS, RHS) ((LHS) >> (RHS))
#define __And(LHS, RHS)    ((LHS) &  (RHS))
#define __Or(LHS, RHS)     ((LHS) |  (RHS))
#define __Xor(LHS, RHS)    ((LHS) ^  (RHS))
#define __Eq(LHS, RHS)     ((LHS) == (RHS))
#define __Nq(LHS, RHS)     ((LHS) != (RHS))
#define __Gt(LHS, RHS)     ((LHS) >  (RHS))
#define __Ge(LHS, RHS)     ((LHS) >= (RHS))
#define __Lt(LHS, RHS)     ((LHS) <  (RHS))
#define __Le(LHS, RHS)     ((LHS) <= (RHS))

static inline SValue __Not(SValue arg0)
{
	SValue val; val.ival = !arg0.ival;
	return val;
}
static inline SValue __Neg(SValue arg0)
{
	SValue val; val.ival = -arg0.ival;
	return val;
}

#include "FuelVMInsts.h"

static INode *FoldIBinary(FuelIRBuilder *builder, IBinary *Inst)
{
	SValue ret;
	enum BinaryOp Op = Inst->Op;
	KonohaContext *kctx = builder->Context;
	IConstant *LHS = (IConstant *) Inst->LHS;
	IConstant *RHS = (IConstant *) Inst->RHS;
	if(ToINode(LHS)->Type == TYPE_boolean) {
		if(ToINode(RHS)->Type == TYPE_boolean) {
			switch(Op) {
#define CASE(X) case X: ret = X##_int_int(LHS->Value, RHS->Value); break
				CASE(Eq); CASE(Nq);
#undef CASE
				default:
					assert(0 && "unreachable");
					break;
			}
			return (INode *) builder->API->newConstant(builder, Inst->base.Type, ret);
		}
	}
	if(ToINode(LHS)->Type == TYPE_int) {
		if(ToINode(RHS)->Type == TYPE_int) {
			switch(Op) {
#define CASE(X) case X: ret = X##_int_int(LHS->Value, RHS->Value); break
				CASE(Add); CASE(Sub); CASE(Mul);
				case Div: {
					if(unlikely(RHS->Value.ival == 0)) {
						INode   *Node = CreateObject(builder, TYPE_String, (void *)TS_EMPTY);
						return (INode *) builder->API->newThrow(builder, Node,
								KException_("ZeroDivided"), SoftwareFault, Inst->uline);
					}
					ret = Div_int_int(LHS->Value, RHS->Value);
					break;
				}
				CASE(Mod);
				CASE(LShift); CASE(RShift); CASE(And); CASE(Or); CASE(Xor);
				CASE(Eq); CASE(Nq); CASE(Gt); CASE(Ge); CASE(Lt); CASE(Le);
#undef CASE
				default:
				assert(0 && "unreachable");
				break;
			}
			return (INode *) builder->API->newConstant(builder, Inst->base.Type, ret);
		}
	}
	if(ToINode(LHS)->Type == TYPE_float) {
		if(ToINode(RHS)->Type == TYPE_float) {
			switch(Op) {
#define CASE(X) case X: ret = X##_float_float(LHS->Value, RHS->Value); break
				CASE(Add); CASE(Sub); CASE(Mul);
				case Div: {
					if(unlikely(RHS->Value.ival == 0)) {
						INode   *Node = CreateObject(builder, TYPE_String, (void *)TS_EMPTY);
						return (INode *) builder->API->newThrow(builder, Node,
								KException_("ZeroDivided"), SoftwareFault, Inst->uline);
					}
					ret = Div_float_float(LHS->Value, RHS->Value);
					break;
				}
				CASE(Eq); CASE(Nq); CASE(Gt); CASE(Ge); CASE(Lt); CASE(Le);
#undef CASE
				default:
				assert(0 && "unreachable");
				break;
			}
			return (INode *) builder->API->newConstant(builder, Inst->base.Type, ret);
		}
	}
	return NULL;
}

static INode *FoldAssert(FuelIRBuilder *builder, ICall *Inst)
{
	/* Remove NameSpace.assert(true) */
	KonohaContext *kctx = builder->Context;
	INode **MtdPtr = ARRAY_n(Inst->Params, 0);
	kMethod *mtd = (kMethod *) ((IConstant *) *MtdPtr)->Value.obj;
	if(mtd->typeId == TYPE_NameSpace && mtd->mn == KMethodName_("assert")) {
		if(ARRAY_size(Inst->Params) != 3) {
			return 0;
		}
		IConstant *Val;
		if((Val = CHECK_KIND(*ARRAY_n(Inst->Params, 2), IConstant))) {
			if(Val->base.Type == TYPE_boolean && Val->Value.bval == true) {
				Inst->base.Unused = 1;
				return (INode *) builder->API->newConstant(builder, Val->base.Type, Val->Value);
			}
		}
	}
	return 0;
}

static INode *FoldICall(FuelIRBuilder *builder, ICall *Inst)
{
	SValue val = {};
	unsigned i;
	INodePtr *x, *MtdPtr = ARRAY_n(Inst->Params, 0);
	kMethod *mtd = (kMethod *) ((IConstant *) *MtdPtr)->Value.obj;

	INode *ret = NULL;
	if((ret = FoldAssert(builder, Inst)) != 0) {
		return ret;
	}
	if(!kMethod_Is(Const, mtd)) {
		return NULL;
	}
	FOR_EACH_ARRAY_(Inst->Params, x, i) {
		if(!CHECK_KIND(*x, IConstant))
			return NULL;
	}

	KonohaContext *kctx = builder->Context;
	unsigned psize = ARRAY_size(Inst->Params) - 1;
	BEGIN_UnusedStack(lsfp);

	enum TypeId Type = ToUnBoxType(Inst->base.Type);
	KClass  *kclass = KClass_(ToKType(kctx, Type));
	kObject *DefObj = KLIB Knull(kctx, kclass);
	KStackSetObjectValue(lsfp[K_RTNIDX].asObject, DefObj);
	KStackSetUnboxValue(lsfp[K_RTNIDX].unboxValue, kObject_Unbox(DefObj));

	FOR_EACH_ARRAY__(Inst->Params, x, i, 1) {
		IConstant *C = (IConstant *) *x;
		if(IsUnBoxedType(C->base.Type)) {
			KStackSetUnboxValue(lsfp[i-1].unboxValue, C->Value.bits);
		} else {
			KStackSetObjectValue(lsfp[i-1].asObject, C->Value.obj);
			KStackSetUnboxValue(lsfp[i-1].unboxValue, kObject_Unbox(C->Value.obj));
		}
	}
	if(Inst->Op == VirtualCall) {
		kNameSpace *ns = builder->Method->ns;
		KStackSetObjectValue(lsfp[K_NSIDX].asNameSpace, ns);
	}
	KStackSetMethodAll(lsfp, DefObj, Inst->uline, mtd, psize);
	KStackCall(lsfp);
	END_UnusedStack();

	Type = Inst->base.Type;
	if(IsUnBoxedType(Type)) {
		val.bits = lsfp[K_RTNIDX].unboxValue;
	} else {
		val.obj  = lsfp[K_RTNIDX].asObject;
	}
	return (INode *) builder->API->newConstant(builder, Type, val);
}

INode *FoldInst(FuelIRBuilder *builder, INode *Node)
{
	if(Node->Kind == IR_TYPE_ICall) {
		return FoldICall(builder, (ICall *) Node);
	}
	if(Node->Kind == IR_TYPE_IUnary) {
		IUnary *Inst = (IUnary *) Node;
		IConstant *Val;
		if((Val = CHECK_KIND(Inst->Node, IConstant))) {
			if(ToINode(Val)->Type == TYPE_int) {
				SValue ret;
				switch(Inst->Op) {
#define CASE(X) case X: ret = __##X((Val)->Value); break
					CASE(Not); CASE(Neg);
#undef CASE
					case Box: {
						return NULL;
						//FIXME
						//KClass *ct =...
						//return KLIB new_kObject(kctx, OnStack, ct, Val->Value);
					}
					default: assert(0 && "unreachable");
				}
				return (INode *) builder->API->newConstant(builder, TYPE_int, ret);
			}
		}
	}
	if(Node->Kind == IR_TYPE_IBinary) {
		IBinary *Inst = (IBinary *) Node;
		if(CHECK_KIND(Inst->LHS, IConstant)) {
			if(CHECK_KIND(Inst->RHS, IConstant)) {
				return FoldIBinary(builder, Inst);
			}
		}
	}
	return NULL;
}

typedef struct ValueReplacer {
	FuelIRBuilder *builder;
	INodeList Vals;
	unsigned Count;
} ValueReplacer;

static void ValueReplacer_Init(ValueReplacer *Repl, FuelIRBuilder *builder)
{
	Repl->Count = 0;
	Repl->builder = builder;
	ARRAY_init(INodePtr, &Repl->Vals, 0);
}

static unsigned CommitReplaceValue(ValueReplacer *Repl)
{
	INodePtr *x, *e;
	FOR_EACH_ARRAY(Repl->Vals, x, e) {
		INode *oldNode = (INode *) *(x);
		INode *newNode = (INode *) *(x+1);
		ReplaceValueWith(Repl->builder, oldNode, newNode);
		++x;
	}
	ARRAY_dispose(INodePtr, &Repl->Vals);
	return Repl->Count;
}

static void ScheduleReplaceValue(ValueReplacer *Repl, INode *oldNode, INode *newNode, bool forceUpdate)
{
	if(forceUpdate) {
		ReplaceValueWith(Repl->builder, oldNode, newNode);
	} else {
		ARRAY_add(INodePtr, &Repl->Vals, oldNode);
		ARRAY_add(INodePtr, &Repl->Vals, newNode);
	}
}

static void Block_insertNode(Block *block, INodeList *List)
{
	unsigned shift = ARRAYp_size(List);
	if(shift) {
		unsigned size = ARRAY_size(block->insts);
		INode *Insts[size];
		ARRAY_ensureSize(INodePtr, &block->insts, size + shift + 1);
		memcpy(Insts, block->insts.list, sizeof(INodePtr)*size);
		memcpy(block->insts.list, List->list, sizeof(INodePtr)*shift);
		memcpy(block->insts.list+shift, Insts, sizeof(INodePtr)*size);
		ARRAY_size(block->insts) = ARRAY_size(block->insts) + shift;
	}
}

static void FoldStdCall(FuelIRBuilder *builder)
{
	INodeList Modified;
	BlockPtr *x, *e;

	ValueReplacer Repl;
	ValueReplacer_Init(&Repl, builder);

	ARRAY_init(INodePtr, &Modified, 0);
	FOR_EACH_ARRAY(builder->Blocks, x, e) {
		INodePtr *Inst, *End;
		ARRAY_clear(Modified);
		FOR_EACH_ARRAY((*x)->insts, Inst, End) {
			if((*Inst)->Unused == 1)
				continue;
			INode *Node = FoldInst(builder, *Inst);
			if(Node) {
				ScheduleReplaceValue(&Repl, *Inst, Node, false);
				ARRAY_add(INodePtr, &Modified, Node);
			}
		}
		Block_insertNode(*x, &Modified);
	}
	CommitReplaceValue(&Repl);
	ARRAY_dispose(INodePtr, &Modified);
}

/* ------------------------------------------------------------------------- */
/* FoldCondBranch */

static void FoldCondBranch(FuelIRBuilder *builder)
{
	BlockPtr *x, *e;
	FOR_EACH_ARRAY(builder->Blocks, x, e) {
		if(ARRAY_size((*x)->insts) > 0) {
			INode **NodePtr = ARRAY_last((*x)->insts);
			IBranch *Br;
			if((Br = CHECK_KIND(*NodePtr, IBranch))) {
				IConstant *Cond;
				if((Cond = CHECK_KIND(Br->Cond, IConstant))) {
					assert(ToINode(Cond)->Type == TYPE_boolean);
					Block *TrueBB, *FalseBB;
					if(Cond->Value.bval) {
						TrueBB  = Br->ThenBB;
						FalseBB = Br->ElseBB;
					} else {
						TrueBB  = Br->ElseBB;
						FalseBB = Br->ThenBB;
					}
					RemoveEdge(*x, FalseBB);
					*NodePtr = (INode *) builder->API->newJump(builder, TrueBB);
				}
			}
		}
	}
}

static void LinkBlocks1(FuelIRBuilder *builder, Block *BB, bool IsVisited)
{
	while(Block_IsVisited(BB) != IsVisited) {
		Block_SetVisited(BB, IsVisited);
		INode *Inst = *(ARRAY_last(BB->insts));
		enum IRType Kind = Inst->Kind;
		assert(IsBranchInst(Inst));
		ARRAY_add(BlockPtr, &builder->Blocks, BB);
		switch(Kind) {
		case IR_TYPE_IBranch:
			AddEdge(BB, ((IBranch *)Inst)->ThenBB);
			AddEdge(BB, ((IBranch *)Inst)->ElseBB);
			LinkBlocks1(builder, ((IBranch *)Inst)->ThenBB, IsVisited);
			BB = ((IBranch *)Inst)->ElseBB;
			break;
		case IR_TYPE_ITest:
			AddEdge(BB, ((ITest *)Inst)->TargetBlock);
			BB = ((ITest *)Inst)->TargetBlock;
			break;
		case IR_TYPE_IReturn:
		case IR_TYPE_IThrow:
		case IR_TYPE_IYield:
			break;
		case IR_TYPE_ITry:
			assert(0 && "TODO");
			break;
		case IR_TYPE_IJump:
			AddEdge(BB, ((IJump *)Inst)->TargetBlock);
			BB = ((IJump *)Inst)->TargetBlock;
			break;
		default:
			assert(0 && "unreachable");
			break;
		}
	}
}

static void LinkBlocks(FuelIRBuilder *builder, Block *BB, bool IsVisited)
{
	if(ARRAY_size(builder->Blocks) > 0) {
		BlockPtr *x, *e;
		FOR_EACH_ARRAY(builder->Blocks, x, e) {
			ARRAY_clear((*x)->preds);
			ARRAY_clear((*x)->succs);
		}
		ARRAY_clear(builder->Blocks);
	}
	LinkBlocks1(builder, BB, IsVisited);
}

static void FoldCFG(FuelIRBuilder *builder)
{
	/* Fold Control Flow
	 * [Case1]
	 *     [Before]            [After]
	 * BB0: IUpdate $a $b | BB0: IUpdate $a $b
	 *      IJump BB1     |      iAdd $c $d
	 * BB1: iAdd $c $d    |      ...
	 *      ...           |
	 */
	BlockPtr *x, *e;
	FOR_EACH_ARRAY(builder->Blocks, x, e) {
		if(ARRAY_size((*x)->succs) == 1) {
			Block *Target = ARRAY_get(BlockPtr, &((*x)->succs), 0);
			if(ARRAY_size(Target->preds) > 1) {
				return;
			}
			if(*x == Target)
				return;
			INodePtr *Inst, *End;
			INode *LastInst = *(ARRAY_last((*x)->insts));
			assert(CHECK_KIND(LastInst, IJump));
			(*x)->insts.size -= 1;
			FOR_EACH_ARRAY(Target->insts, Inst, End) {
				ARRAY_add(INodePtr, &(*x)->insts, *Inst);
				INode_setParent(*Inst, (INode *) *x);
			}
		}
	}
}

/* ------------------------------------------------------------------------- */
static void RemoveInstructionAfterBranchInst(FuelIRBuilder *builder)
{
	BlockPtr *x, *e;
	FOR_EACH_ARRAY(builder->Blocks, x, e) {
		INodePtr *Inst;
		INodePtr *LastInst = (ARRAY_last((*x)->insts));
		unsigned i;
		FOR_EACH_ARRAY_((*x)->insts, Inst, i) {
			if(IsBranchInst(*Inst) && Inst != LastInst) {
				ARRAY_size((*x)->insts) =  i + 1;
			}
		}
	}
}

/* ------------------------------------------------------------------------- */
static void CopyIfBlockHasSingleInst(Block *BB, INode *LastInst, Block *Block)
{
	if(ARRAY_size(Block->insts) > 1)
		return;
	INode *Inst = ARRAY_get(INodePtr, &Block->insts, 0);
	if(CHECK_KIND(LastInst, IJump) && CHECK_KIND(Inst, IReturn)) {
		memcpy(LastInst, Inst, sizeof(INodeImpl));
	}
	else if(CHECK_KIND(LastInst, IJump) && CHECK_KIND(Inst, IJump)) {
		if(ARRAY_size(Block->preds) == 1 && ARRAY_size(Block->succs) == 1) {
			memcpy(LastInst, Inst, sizeof(INodeImpl));
		}
	}
	else if(CHECK_KIND(LastInst, IBranch) && CHECK_KIND(Inst, IJump)) {
		//debug("Branch %d=>%d\n", BB->base.Id, Block->base.Id);
		IBranch *Branch = (IBranch *) LastInst;
		IJump   *Jump   = (IJump *) Inst;
		if(Branch->ThenBB == Block) {
			Branch->ThenBB = Jump->TargetBlock;
		} else {
			Branch->ElseBB = Jump->TargetBlock;
		}
	}
}

static void RemoveIndirectJumpBlock(FuelIRBuilder *builder, Block *BB, bool IsVisited)
{
	/* Remove Block that contain only one Jump Instruction
	 * [Case1]
	 *     [Before]            [After]
	 * BB0: IUpdate $a $b | BB0: IUpdate $a $b
	 *      IJump BB1     |      IJump BB2
	 * BB1: IJump BB2     |
	 * BB2: ...           | BB2: ...
	 * [Case2]
	 *     [Before]            [After]
	 * BB0: Branch BB1 BB2| BB0: Branch BB3 BB2
	 * BB1: IJump BB3     |
	 * BB2: IUpdate $a $c | BB2: IUpdate $a $c
	 *      IJump BB3     |      IJump BB3
	 * BB3: ...           | BB3: ...
	 */
	while(Block_IsVisited(BB) != IsVisited) {
		Block_SetVisited(BB, IsVisited);
		INode *Inst = *(ARRAY_last(BB->insts));
		assert(IsBranchInst(Inst));
		IBranch *Branch;
		ITest   *Test;
		IJump   *Jump;
		if((Branch = CHECK_KIND(Inst, IBranch)) != 0) {
			CopyIfBlockHasSingleInst(BB, ToINode(Branch), Branch->ThenBB);
			CopyIfBlockHasSingleInst(BB, ToINode(Branch), Branch->ElseBB);
			RemoveIndirectJumpBlock(builder, Branch->ThenBB, IsVisited);
			BB = Branch->ElseBB;
		}
		else if((Jump = CHECK_KIND(Inst, IJump)) != 0) {
			Block *NextBB = Jump->TargetBlock;
			CopyIfBlockHasSingleInst(BB, ToINode(Jump), NextBB);
			BB = NextBB;
		}
		else if((Test = CHECK_KIND(Inst, ITest)) != 0) {
			BB = Test->TargetBlock;
		}
		else if(CHECK_KIND(Inst, ITry) != 0) {
			assert(0 && "TODO");
		}
	}
}

/* ------------------------------------------------------------------------- */
static inline void INode_SetMarked(INode *Node, bool Val)
{
	Node->Marked = Val;
}

static inline bool INode_IsMarked(INode *Node)
{
	return Node->Marked;
}

static void TraceNode1(INode *Node)
{
	if(Node->Unused) {
		return;
	}
#define CASE(KIND) case IR_TYPE_##KIND:
	switch(Node->Kind) {
		case IR_TYPE_IConstant:
		case IR_TYPE_IArgument:
			break;
		CASE(IField) {
			IField *Inst = (IField *) Node;
			switch(Inst->Op) {
				case GlobalScope:
				case EnvScope:
				case FieldScope:
					INode_SetMarked(Node, 1);
					INode_SetMarked(Inst->Node, 1);
					break;
				case LocalScope:
					break;
			}
			break;
		}
		CASE(INew) {
			INode_SetMarked(Node, 1);
			break;
		}
		CASE(ICall) {
			ICall *Inst = (ICall *) Node;
			INode_SetMarked(Node, 1);
			INodePtr *x;
			unsigned i;
			FOR_EACH_ARRAY__(Inst->Params, x, i, 1) {
				INode_SetMarked(*x, 1);
			}
			break;
		}
		CASE(IFunction) {
			IFunction *Inst = (IFunction *) Node;
			INode_SetMarked(Node, 1);
			INode_SetMarked(Inst->Func, 1);
			INode_SetMarked(Inst->Env, 1);
			INode_SetMarked(Inst->Method, 1);
			break;
		}
		CASE(IUpdate) {
			IUpdate *Inst = (IUpdate *) Node;
			INode_SetMarked(Node, 1);
			INode_SetMarked(Inst->RHS, 1);
			break;
		}
		CASE(IBranch) {
			INode_SetMarked(Node, 1);
			INode_SetMarked(((IBranch *) Node)->Cond, 1);
			break;
		}
		CASE(ITest) {
			INode_SetMarked(Node, 1);
			INode_SetMarked((INode *)((ITest *) Node)->Value, 1);
			assert(0 && "TODO");
			break;
		}
		CASE(IReturn) {
			IReturn *Inst = (IReturn *) Node;
			INode_SetMarked(Node, 1);
			if(Inst->Inst) {
				INode_SetMarked(Inst->Inst, 1);
			}
			break;
		}
		CASE(IJump) {
			INode_SetMarked(Node, 1);
			break;
		}
		CASE(IThrow) {
			IThrow *Inst = (IThrow *) Node;
			INode_SetMarked(Node, 1);
			INode_SetMarked((INode *) Inst->Val, 1);
			break;
		}
		CASE(ITry) {
			INode_SetMarked(Node, 1);
			assert(0 && "TODO");
			break;
		}
		CASE(IYield) {
			INode_SetMarked(Node, 1);
			INode_SetMarked(((IYield *) Node)->Value, 1);
			break;
		}
		CASE(IUnary) {
			INode_SetMarked(((IUnary *) Node)->Node, 1);
			break;
		}
		CASE(IBinary) {
			IBinary *Inst  = (IBinary *) Node;
			INode_SetMarked(Inst->LHS, 1);
			INode_SetMarked(Inst->RHS, 1);
			break;
		}
		CASE(IPHI) {
			IPHI *Inst  = (IPHI *) Node;
			INode_SetMarked(Node, 1);
			INode_SetMarked((INode *) Inst->Val, 1);

			INodePtr *x, *e;
			FOR_EACH_ARRAY(Inst->Args, x, e) {
				INode_SetMarked(*x, 1);
			}
			break;
		}
		default:
			assert(0 && "unreachable");
#undef CASE
	}
}

static void RemoveUnusedVariable(FuelIRBuilder *builder)
{
	BlockPtr *x, *e;
	FOR_EACH_ARRAY(builder->Blocks, x, e) {
		INodePtr *Inst, *End;
		FOR_EACH_ARRAY((*x)->insts, Inst, End) {
			INode_SetMarked(*Inst, 0);
		}
	}

	FOR_EACH_ARRAY(builder->Blocks, x, e) {
		INodePtr *Inst, *End;
		INode_SetMarked((INode *)(*x), 1);
		FOR_EACH_ARRAY((*x)->insts, Inst, End) {
			TraceNode1(*Inst);
		}
	}

	INodeList Insts;
	ARRAY_init(INodePtr, &Insts, 32);
	FOR_EACH_ARRAY(builder->Blocks, x, e) {
		INodePtr *Inst, *End;
		FOR_EACH_ARRAY((*x)->insts, Inst, End) {
			if(INode_IsMarked(*Inst)) {
				ARRAY_add(INodePtr, &Insts, *Inst);
			}
		}
		INodeList *list = &(*x)->insts;
		memcpy(list->list, Insts.list, sizeof(INodePtr)*ARRAY_size(Insts));
		list->size = ARRAY_size(Insts);
		Insts.size = 0;
	}
	ARRAY_dispose(INodePtr, &Insts);
}

/* ------------------------------------------------------------------------- */
/* FoldPHIInst */

#ifdef FUELVM_USE_LLVM
static void FoldPHIInst1(IPHI *PHI)
{
	INodePtr *x, *e;
	INode *Val  = PHI->Val;
	INode *Inst = *ARRAY_n(PHI->Args, 0);
	FOR_EACH_ARRAY(PHI->Args, x, e) {
		if(Inst != *x)
			return;
		++x;
	}
	ARRAY_dispose(INodePtr, &PHI->Args);
	IUpdate *Node = (IUpdate *) PHI;
	Node->base.Kind = IR_TYPE_IUpdate;
	Node->LHS = (IField *) Val;
	Node->RHS = Inst;
}

static void FoldPHIInst(FuelIRBuilder *builder)
{
	BlockPtr *x, *e;
	FOR_EACH_ARRAY(builder->Blocks, x, e) {
		INodePtr *Inst, *End;
		FOR_EACH_ARRAY((*x)->insts, Inst, End) {
			if(CHECK_KIND(*Inst, IPHI)) {
				FoldPHIInst1((IPHI *) *Inst);
			}
		}
	}
}
#endif

/* ------------------------------------------------------------------------- */
/* ConstantPropagation */

#ifdef FUELVM_USE_LLVM
static void ConstantPropagation(FuelIRBuilder *builder)
{
	/* FIXME(ide) This rountine is very very slow with complicated control flow. */
#if 0
	BlockPtr *x, *e;
	ValueReplacer Repl;
	ValueReplacer_Init(&Repl, builder);

	FOR_EACH_ARRAY(builder->Blocks, x, e) {
		INodePtr *Inst, *End;
		FOR_EACH_ARRAY((*x)->insts, Inst, End) {
			IUpdate *Update;
			if((Update = CHECK_KIND(*Inst, IUpdate))) {
				if(Update->LHS->Op == LocalScope) {
					if(CHECK_KIND(Update->RHS, IConstant)) {
						//ScheduleReplaceValue(&Repl, *Inst, Update->RHS, false);
					}
				}
			}
		}
	}
	CommitReplaceValue(&Repl);
#endif
}
#endif

/* ------------------------------------------------------------------------- */
extern void InsertPHINode(FuelIRBuilder *builder);

void IRBuilder_Optimize(FuelIRBuilder *builder, Block *BB, bool NeedPHI)
{
	bool Flag = false;
	LinkBlocks(builder, BB, Flag); Flag = !Flag;
	RemoveInstructionAfterBranchInst(builder);
	LinkBlocks(builder, BB, Flag); Flag = !Flag;

	FoldCondBranch(builder);
	FoldStdCall(builder);
	RemoveInstructionAfterBranchInst(builder);
	FoldCFG(builder);
	RemoveIndirectJumpBlock(builder, BB, Flag); Flag = !Flag;
	LinkBlocks(builder, BB, Flag); Flag = !Flag;
#ifdef FUELVM_USE_LLVM
	if(NeedPHI) {
		InsertPHINode(builder);
		FoldPHIInst(builder);
		ConstantPropagation(builder);
		FoldStdCall(builder);
		FoldStdCall(builder);
	}
#endif
	RemoveUnusedVariable(builder);
}

#ifdef __cplusplus
} /* extern "C" */
#endif

redpajama_set_name: RedPajamaGithub