text:
Epifania - Duele El Rencor Tab
Learn "Duele El Rencor" faster with Songsterr Plus plan!
Marlon - Distortion GuitarTrack difficulty (Rhythm)
dAFCGDP. M.P. M.1=1804420000000042000000P. M.P. M.P. M.3530000004253422040000000042000053P. M.P. M.P. M.P. M.51004200535342422060042005353424220P. M.P. M.P. M.7000000004200000085300000042534220P. M.P. M.P. M.P. M.90000000042000053100042005353424220P. M.P. M.P. M.P. M.P. M.1100300200305064P. M.P. M.P. M.12003002023525232584P. M.13202020202020202044142020202020202020P. M.15202020202020202164x3525232517P. M.P. M.P. M.P. M.18202020202020202020202020P. M.P. M.P. M.P. M.19202020202020202020202020P. M.P. M.P. M.P. M.202020202020202020202020221135252325P. M.2235252325230000000000000000P. M.240000000000000000P. M.2500000000000000226135252325273525232528220220220P. M.P. M.P. M.290000000042000000305300000042534220P. M.P. M.P. M.P. M.3100000000420000533210042005353424220P. M.P. M.P. M.P. M.P. M.P. M.P. M.3300420053534242203400300200305064P. M.P. M.P. M.35003002023525232584P. M.36202020202020202044372020202020202020P. M.38202020202020202394x3525232540P. M.P. M.P. M.P. M.41202020202020202020202020P. M.P. M.P. M.P. M.42202020202020202020202020P. M.P. M.P. M.P. M.432020202020202020202020244135252325P. M.4535252325460000000000000000P. M.470000000000000000P. M.4800000000000000249135252325P. M.P. M.50352523255122022022023552220220220235P. M.P. M.53122022022023554313131315353535355220220220532P. M.P. M.P. M.5653535353313131315722022022022022058220220220220P. M.P. M.P. M.592202202202603525232561220220220220220P. M.P. M.P. M.6222022022022063220220220642020202020202020P. M.P. M.P. M.6520202020202020P. M.P. M.P. M.P. M.66202020202020202020202020P. M.P. M.P. M.P. M.67202020202020202020202020P. M.P. M.P. M.P. M.68202020202020202020202020P. M.694x1111333333335555P. M.P. M.P. M.P. M.70202020202020202020202020P. M.P. M.P. M.P. M.71202020202020202020202020P. M.P. M.P. M.P. M.72202020202020202020202020P. M.73111113333333355557411113333333355220


Dale Conner, Eufaula, Oklahoma, speeding (84 in a 65 mph zone), $207.
Dylan E. Ector, Wichita, speeding (74 in a 65 mph zone), $153.
Christopher Marshall Hall, Junction City, speeding (81 in a 65 mph zone), $189.
Jacob Roland Meyer, Wichita, speeding (84 in a 65 mph zone), $207.
Stephen Jermaine Parks, Junction City, speeding (84 in a 65 mph zone), $207.
Monica J. Rickel, Manhattan, speeding (86 in a 65 mph zone), $222.
Elizabeth A. Walker, Junction City, speeding (81 in a 65 mph zone), $153.


How do you think Carnivore in Oak Park compares with Homestead Meats in Evanston?
The only problem is the home equity loan I have to take out to afford to buy there.
Santander wrote: Living in Oak Park and singing regularly in Evanston (I spend an inordinate amount of time stuck on Lake Shore Drive), the highlights for me up north are in no particular order: Kuni's for hot towel and chutoro and agedashi tofu, Cross-Rhodes for Greek fries, Union Pizza for mixed drinks and lamb sausage pie, Edzo's for burgers, and now Peppercorn's for bubble tea and cumin lamb. That Dollop / Hoosier Mama locale seems to be going downhill to me (soggy off-flavor sweet pies, though hand pies are still good) though I like the wide hours. I think each example here is slightly better than or missing from comparative Oak Park selections (Sen Sushi, Papaspiros Greek, any thin pizza place in OP proper, Scratch for burgers, current Katy's iteration for Szechuan, Sugar Fixe or Spilt Milk for bakery-coffee combo).
Carnivore is a best of breed for me right in Oak Park, and when Taste of Brazil comes back I'll be there day one, and I'm really quite fine with Maya del Sol and Altiro at least for margaritas and appetizers, and Saigon Pho for papaya salad and Lola Tining's for halo halo. But if you're willing to cross streets, Gaetano's and Heritage and Axcan and Autre Monde (haven't visited this year though, have seen a slide mentioned here) and Freddy's and Johnnie's and Alpine and Cigars & Stripes and Big Guys and La Quebrada and La Parrillita (and Mr. D's and Pollo Vagabundo for slight stretches) are all more excellent for certain items than anything in Oak Park proper or (debatably) than I've found in or within a few minutes of Evanston. For me, these are both self-proclaimed bastions for which the surrounding landscape actually has more treasures.
Thanks--these and other comments are great. I have more experience with Evanston, but increasingly hear the comparison with OP.
I tend to lump Forest Park in with "Oak Park." Oak Park itself is much smaller than Evanston. I wouldn't choose one or the other over just food. They are quite different communities really.
Not at the top of our list but good food and drinks.
We are there occasionally after a movie at the Lake.
bobbywal wrote: I made a spur of the moment stop at Food Obsession after a band event. Service was friendly, they comped us an order of the fries for seemingly no reason - they were delicious. I got the fish tacos, which I'd order again. Good asian-inspired flavors. My daughter enjoyed her sliders. Beer was good. One pet peeve is that I can't keep track of their hours. I drive by often and are surprised to notice that they are closed during times I'd think they'd do a fine business.
Last edited by Panther in the Den on March 27th, 2018, 12:45 pm, edited 1 time in total.
Vitesse98 wrote: My daughter took a camp at the chef's Food Obsession catering shop on south, and honestly I loved everything they all devised under his guidance. I hope some of his Korean ideas wind their way into whatever he is up to in the former Kinderhook spot.
Driving by today the South Blvd location and I noticed the windows were papered over (equipment I'll inside).
Poke Burrito coming in May or June to the space vacated by the creperie, Purée Kafe AKA: Atlas Kafe.
I liked their Turkish coffee.
For a while they had designs to move into a storefront on Madison just east of KFC but that never materialized.
......All in all a very good meal for opening day. Not surprised though as talking with the hostess/casher this is another store by the owner of North Ave Falafel at North and Oak Park.
Interesting, since the first few times I had been to North Ave Falafel it was completely underwhelming and I have not been back. Has any one been lately? Maybe it has improved.
Petra Falafel has a nice vibe, in part because that room itself is an interesting buildout of Victorian shop with lots of detail remaining. The falafel and particularly the hummus were excellent, and they poured some of their pride and joy olive oil on the olives. Unfortunately the meats were all holdovers and as tough as leather - steak, chicken, and off-flavor kofta. The sumac fries have strong potential but were not cooked through. They were advertising for a new chef and I hope they find one, though the owner does know his chickpeas.
Panther in the Den wrote: ......All in all a very good meal for opening day. Not surprised though as talking with the hostess/casher this is another store by the owner of North Ave Falafel at North and Oak Park.
Unfortunately the meats were all holdovers and as tough as leather - steak, chicken, and off-flavor kofta. The sumac fries have strong potential but were not cooked through. They were advertising for a new chef and I hope they find one, though the owner does know his chickpeas.
I am always worried when I see the spit and not a lot of business. I was lucky (in this rare case) to be able to visit on the opening day.
I saw some praise for Amerikas two pages back, but I went there with a party of 4 at 6pm on Saturday and wanted to say that everyone loved it. We split 6 items and 2 deserts, all of which were fantastic. The place really filled up during the 90 minutes we were there, and I'm glad to see that business was doing well as I hope to make it a staple in my Oak Park rotation. Standouts were the octopus and cauliflower dishes.
I got a falafel sandwich from Petra a couple of weeks ago. It was fine, but I was thrown off by the fact that it appeared to be served rolled in a flour tortilla, burrito-style, and not in a pita, which is what I was expecting (and not what was pictured on the menu). What's up with that?
Vitesse98 wrote: I got a falafel sandwich from Petra a couple of weeks ago. It was fine, but I was thrown off by the fact that it appeared to be served rolled in a flour tortilla, burrito-style, and not in a pita, which is what I was expecting (and not what was pictured on the menu). What's up with that?
Depending on the region, Lebanese style pita sandwiches are made this way with thin pitas rolled as opposed to pita pockets.
I believe it. I was just surprised, because it looked and tasted not like a flatbread but exactly like a flour tortilla, and was folded, rolled and wrapped just like a burrito. I don't think I've ever had a falafel sandwich in anything but a pita.
It is in the location of the shuttered Eyrie which was part of Robert Morris University's culinary school.
Open, drove by yesterday and it was busy.
teatpuller wrote: I tend to lump Forest Park in with "Oak Park." Oak Park itself is much smaller than Evanston. I wouldn't choose one or the other over just food. They are quite different communities really.
The sticky part of this belief is that Oak Park and Forest Park were poles apart when they were founded. Oak Park was the 'restrained, reserved' town, where you might be able to have a glass of wine if you found the correct venue. Forest Park was the 'rock-em-sock-em WET' town where you could have wine, spirits, and beer just about everywhere. This extends to the 21st Century. It is one of my favorite suburbs due to its proximity to the CTA Blue Line "L".
Lunch at Obsessed Kitchen yesterday was beyond disappointing.
We live nearby and although Kinderhook wasn't anything groundbreaking, it was nice to have a place to walk to for a burger and a beer. We were glad to see another restaurant taking over the space and were hoping that Obsessed would be at least decent. My husband and I gave it a try when it first opened and were disappointed. We had hopes though that maybe once they got up and running it would improve. We noticed a sign touting a new menu and new cocktails so thought it might be time to give it another chance. I ordered a Warm Farro Bowl. Fifteen bucks for an unseasoned bowl of farro. It was supposed to have seasonal vegetables. I should have asked what vegetables would top the bowl, but I assumed that seasonal meant it would at least be fresh veg. Instead, it had carrots, yellow squash and zucchini that tasted as if they were straight from a bag out of the freezer. A little pesto, a poached egg on top, but again, not one bit of seasoning. It was the kind of meal that just made me sad. My husbands burger wasn't much better - over cooked and under seasoned. Fries were ok.
Sad to say we won't be going back.
The maple bacon chicken donut slider is $2.95, and intriguingly composed - fresh fried chicken on a split plain donut (their dough is less sweet and more bready than your usual fried ring of delight), with the maple cream and excellent smoky bacon added after.
The donut case is very pretty - bright colors, inventive combinations. I like the concept of the malted milk ball holes better than the final execution where all of the malt flavor is in a crispy disk on top. I've had the cold brew and the nitro coffees and prefer the former slightly.
Promised My Bride a great burger for lunch and when we ran out of time for Plan A I had a bit of a panic for an alternative.
After trying it myself a while back based on a few recommendations here.
Did the job. She traditionally eats light and only ate half at lunch but it stuck in her mind and she just finished the other half for a late night snack.
"How much extra would it be to make it a meal (IE: Add fries and a drink)?"
At first I had to repeat it twice after he said "Huh?", then twice he said "$16.42", then he said "Take the Cheeseburger Meal and add $0.50.".
Still not answering my question.
Finally I said forget it and just give me the burgers with a grunt he voided the order and re-entered it, shouted to the grill "Cancel that order!".
The real name is Billy Bricks.
My Bride and I are battling a summer cold and rather than make our beloved and monthly Masaman Chicken we decided to order in.
I went over, placed the order for carry out and waited. A good way to enjoy the ambiance.
Paint still fresh and explanatory posters on the wall. Good sized with a bench along one wall with smaller tables. Bigger tables in the center.
I was prepared to have some grief over my typical Chicago order, cheese and sausage but the gal didn't blink and asked whether I wanted spicy or mild sausage.
10 minutes! from order to delivery to my table. Sounds about right for a 12" in a 800+ degree wood fired oven (no wood smoke odor).
Took it straight home and dug in, very thin crust a little limp, sauce a little tangy and the cheese and sausage lost. From the 12" pizza there was 10" with toppings but not to fret as the crust was fine to snack on on its own.
Not highly impressed, I would prefer Flapjack Brewery and I know a few other restaurants in the area are doing something similar. Nonna D's on Roosevelt might also have them beat.
Nothing really bad though as to get a true representation of their wares might be in one of their specialty combinations.
That crust was really good! Maybe a cup of sauce for dunking?
The Chicken Enchilada soup (1 of 3) was also very good!
I think you nailed it. Harmless, and something I would eat if put in front of me, but the whole thing felt like someone was rushing the be the first to IPO as the Chipotle of Neapolitan pizza. Flapjacks is better south, and Forno Rosso to the north.
Thirded. Pies at Coalfire / Stop 50 prices without approaching the quality or imagination, and really not any larger. Inoffensive and unambitious like most of The People's Village. Partner with Carnivore and get some good meats, wouldya. I would much rather have had a Blaze, which is literally half the price for a build-your-own, and for which I am a sincere apologist.
Flapjack Brewery is an exciting development. Even better than the pizzas so far is the wood fired muffuletta.
Panther in the Den wrote: The real name is Billy Bricks.
They opened one of these in Mount Prospect in the building with the Ice Arena, in the middle of a light industrial park.
The best thing I could say about them was that it was fast. There was nothing particularly wrong, but it failed entirely to excite the way pizza should. I've had thin crust (non-wood fired) from Mug's and Lou Malnati's in the last couple weeks, and both have aspects that make me say, "oh, yeah, pizza! Let's have another piece." With Brick's it was just fuel.
The "Meal Deals" which include fresh made fries and a drink are listed on the wall menu along with the other men items. Merkt's, burger I believe is $4.69 or $7.19 for the Meal Deal. Ordered individually would be, $8.37.


Barbara van Beuren oversees acquisitions, marketing and design at Anbau Enterprises.
Adhering to the mantra, "if you want something done, do it yourself," New York City real estate developer Barbara van Beuren positioned herself at the helm one of the city's most prominent firms.
With a background in architecture, van Beuren grew her areas of expertise from aesthetics and materials to procuring money for ground-up projects and the management of the many professionals needed for building construction. She now oversees acquisitions, marketing and design at Anbau Enterprises, a development company founded by her husband, Stephen Glascock, in 1998.
Included in Anbau's recent portfolio is Citizen360 at 360 E. 89th St. in Yorkville, which in the first half of 2018 was among the top-selling luxury buildings on the Upper East Side. But while architecture and brokering are popular career choices for women, real estate development, especially on the commercial side, has been historically dominated by men. I asked van Beuren about her hunger for a seat at the table and what she thinks women in particular can bring to it.
I'm an architect by training and I met my husband and my business partner in grad school, and after grad school we got licensed. You know, you go and you work in architecture firms and you do work for developers, and it became pretty clear pretty quickly that if you wanted to build the buildings you wanted to build, you had to control the money. It all starts with the money. So we started slowly and we bought a small loft build in Chelsea almost 20 years ago and we renovated that, we started doing one building at a time, and by 2007 we had completed our first new construction building. And then 2008 hit - but since then we've only done ground-up and we've never looked back.
Included in Anbau's recent portfolio is Citizen360 at 360 E. 89th St. on the Upper East Side.
Do you agree that real estate development is a male-dominated industry?
There are plenty of women in the real estate field in New York, but there are not many female developers. Women dominate residential brokerages, sales and marketing, design, but there's no doubt that men completely dominate the commercial side of things. The developer role is highly speculative. A developer is defined by somebody who is building new commercial or residential space, they're actually building things that didn't exist before, and they're doing that with debt and they have to convince people to lend them the money.
Why are there less women in the commercial sector?
People like deals. We [at Anbau] are not deal junkies. Women tend to focus on the residential side because, I guess, they're working with places you live in and homes, and men seem to transact on the commercial side. For me, the thing about cash-flow is it's less related to design, it's all about underwriting and numbers. I always found it fascinating that the majority of people who are in the real estate business on the brokerage side and the ownership side, it's never about what the building looks like, it's always about the cash flow. And yet real estate means buildings. It's so odd to me because I'm an architect. I think that has less to do with the fact that I'm female and more do to with my background.
Is your experience different when you're working with men vs. women?
Women always bring a different perspective to the table. I think women are better (not always) at working in teams, and often they're more likely to be consensus-builders. In the beginning I was the only woman in our office, today we're about 50/50, and I think that it makes this office more productive, more well-rounded, a much nicer place to live and work. Generally, you put a woman in the room in a lot of these negotiations, especially with contractors, and everyone behaves, so the whole level of dialogue becomes much more respectful and much less testosteroned. It's that ego-thing again. I think women are much more pragmatic, often, and that the field could really use a little leveling - a little more humanity. Even in the press.
How do you keep from feeling intimidated during negotiations?
What always changes the dialogue is, who controls the money? If you're the one who controls the money then people are much nicer to you. I've had contactors at times really give me a hard time and I just turn around and give it right back to them and it shuts them up - but part of the reason I'm able to do that is because I know the language, I know the process, I hold the checkbook and all those sorts of things. And I can get them fired.
If readers aspire to become real estate developers, what should they do first?
The thing about real estate development is that you have to wear many hats. You can't be good at everything, but you have to know and feel confident that the decisions you're making are good ones and are not just financial decisions. You're making decisions about management, design - you have to know how to manage a contractor, you have to know how not to get walked all over. You need to know how to raise money. There are so many things that you need to know, and you can't know it all which is why being a good team builder is really important. I think you start out with the things that you're good at and you pursue one of those. You can enter development through all sorts of avenues - the brokerage side, the design side, the asset management side. You have to learn how to express ideas in multiple ways, and you just have to start working.


Several academic papers by leading experts at the HSE Institute of Education have been featured in Springer's newly released volume Reforms and Innovation in Education, edited by Alexander M. Sidorkin and Mark K. Warford. The authors explore various factors and processes shaping the relationships between educational reforms, as driven by deep and progressive socioeconomic changes, their effects on innovations across the educational realm, and the implications for the quality of human capital.
National Research University Higher School of Economics → Research Departments → Institute of Education → News → Tag " human capital"


The overall park incorporates twin towers, each providing 5,600m² of flexible office space, 1,400m² of ground level retail tenancies and a double basement carpark for in excess of 350 cars, which services both towers via six high speed lifts. The sleek exteriors reflect the waterside setting in Bundall. A foyer retrofit was completed mid-2016 for Gold Coast City Council, who now occupy the towers, involving new joinery, furniture and finishes.
'… A fine resolution of the client's brief, producing efficient, column-free and flexible office space'; comment made by the RAIA on the medium-scale commercial precinct at Bundall.


text:
No public, limited news media: Panel sets COVID-19 rules for upcoming Alaska legislative session
Author: James Brooks
The 14-member bicameral Legislative Council meets Thursday, June 13, 2019 in the Alaska State Capitol. The council takes action for the Legislature while lawmakers are not in session. (James Brooks / ADN)
The public will be barred from the Alaska State Capitol, members of the news media will be prohibited from entering the House and Senate chambers, and lawmakers must wear masks under a set of new anti-COVID rules approved Monday by a committee of the Alaska Legislature.
Any legislator that refuses to submit to a health screening at the Capitol's entrance "will be denied entrance to the Capitol." Any lawmaker who refuses to wear a face covering on the floor of the House or Senate "will be escorted ... to their individual office where they shall remain," according to the new enforcement guidelines.
The rules will be in effect only until the House and Senate elect new leaders for the upcoming legislative session, but both halves of the Legislature are deadlocked, and it isn't certain when either the House or Senate will resolve the leadership question.
That uncertainty has left the joint House-Senate Legislative Council in charge, and it voted 11-1 to approve the rules.
"These rules only apply until we have a new president and speaker. It is pretty extraordinary, but we know the fears that many of our employees have," said Sen. Gary Stevens, R-Kodiak and the council's chairman.
The lone "no" vote was from Rep. DeLena Johnson, R-Palmer.
Johnson said she believes the council's recommendations could result in the disenfranchisement of Alaskans if their legislator refuses to follow the rules and is denied the ability to vote. With the House and Senate closely divided, the absence of even one legislator could decide key votes.
"I personally don't think Lora Reinbold should be disenfranchised from voting on a new Senate President," she said, referring hypothetically to the Eagle River senator who declined to wear a mask in the Capitol earlier this year and castigated Alaska Airlines for its masking policy. (Reinbold has not yet spoken about the new rules or her intentions for the upcoming session.)
"Maybe when you're in a deadlock tie, keeping somebody off the floor might mean something," she said.
Four of the "yes" votes Monday came from lawmakers who lost their reelection campaigns this fall. One of them, Senate President Cathy Giessel, R-Anchorage, compared the mask mandate to the Legislature's "decorum" rules, which require legislators to abide by a dress code.
"In this scenario that we're living in right now, a mask is part of floor decorum," she said.
Legislators are also being asked to quarantine after traveling to or from Juneau and are being discouraged from making their usual return-to-district trips during the session. This year, legislators can arrive in Juneau up to 15 days before session and receive regular per diem expense payments for each day before the session begins.
Johnson and other lawmakers question whether the Legislative Council's vote has power past Jan. 19, when the next legislative session begins. The Alaska Supreme Court has repeatedly ruled that one Legislature cannot bind another, except through a constitutional amendment. Monday's vote took place during the 31st Legislature. When the 32nd Legislature begins, that action loses power, they say.
"Clearly the work that we're doing today becomes advisory in nature until some other mechanism is adopted," said Rep. Bryce Edgmon, I-Dillingham.
Stevens disagreed, saying Monday's vote is binding.
"It's a decision by Legislative Council that is in effect now, and it will be until the House and Senate decides who their presiding officers are going to be," he said.
"When these policies need to begin being enforced, we will still be within the 31st Alaska state Legislature, so in my opinion, it is appropriate that this group and the current presiding officers make policy decisions," Megan Wallace, the Legislature's legal services director, advised the Legislative Council.
Jessica Geary is executive director of the Legislative Affairs Agency, the Legislature's nonpartisan administrative wing. She said by text message that she considers Monday's vote "binding (Legislative Council) policy until amended or rescinded by the next (Legislative Council)."
Earlier this year, similar restrictions in Oregon's state Capitol were met with violent opposition as rioters smashed buildings, spayed bear mace and invaded the building. Stevens, who grew up in Oregon, said he doesn't think that will happen in Alaska.
Asked why, he said, "I'm not sure. We have some extremists, but we also have a lot of people who believe in the middle way and compromise and getting things done. I hope, I think, they have a stronger voice."
James Brooks
Juneau-based James Brooks covers state government, the Alaska Legislature and general assignments for the Daily News. He previously reported and edited for the Juneau Empire, Kodiak Daily Mirror and Fairbanks Daily News-Miner.
Alaska on Thursday reports another death linked to COVID-19, 203 new infections

redpajama_set_name: RedPajamaCommonCrawl


text:
words and music by Susan Stoderl
Place: New York City, 1858
Act I, Scene 1: Outside the New York Ledger office on lower Broadway, Sara Payson Willis Eldridge Farrington Parton (a/k/a/ Fanny Fern) explains the circumstances of her having become a world-renowned, highly-paid female columnist. Two women of American Females for Righteousness, Abasement, Ignorance & Docility (A.F.R.A.I.D.), an organization that promotes the ideals of True Womanhood, lurk in the background to investigate the social mayhem being caused by this rebel.
Leaving Broadway, Fanny enters the notorious Five Points slum. Her pursuers, Senza Bliss, President of A.F.R.A.I.D, and Constance Purity, an ardent member of the Ladies Missionary Society, stop following Fanny. "Christian women, can go no further. " Leaving Five Points, Fanny hears Rachel Stitcher, a Jewish seamstress, and Bridget OMalley and Kathleen OLeary, two Irish-Catholic domestics, singing "Dollars and Dimes" on their way to work at the home of Senza Bliss.
Act I, Scene 2: Fanny accompanies the three workers to the Bliss home. Kathleen and Bridget s set to work, while Rachel (Fanny's informant) and Fanny confer. Rachel tells Fanny that she must investigate the deplorable working conditions at the Bliss & Fortune Factory. Fanny states that she is well aware of this situation, and will write about it.
From the working quarters of the great house, a trio "Saturday, Sunday, Monday and Tuesday" is sung by the three domestics. An impromptu meeting of A.F.R.A.I.D. has been called to assess the damage being caused by Fanny and her very successful columns. Belle Fortune, whom Senza strongly dislikes, is immediately dismissed to the garden, but instead, sneaks upstairs to visit her secret friend, Rachel.
Underneath the polite chit-chat of the formal tea party, signs of rebellion against Senza's tyrannical rule, are starting to show in irreverent asides. Maddy Broadbrim, wife of the police commissioner, remarks that her husband is taking her for a ride in the country. Luna Simon, a young spinster, remarks that "he must have something up his sleeve." The downtrodden Mary Lee parrots all that Senza or Constance say.
Iwanna Fortune casually asks Senza if her son has any plans of marrying soon. Senza is horrified for he is "a mere boy of only 25." Unknown to Senza is the fact that Harry Bliss, Jr. is engaged to Belle, the very last person Senza would choose for him.
After the ladies have departed, Senza confesses to Constance that she has helped Maddy Broadbrim's and Mary Lee's husbands to commit them to Dr. Delusions Home for Disagreeable Women. Here they may be reformed into excellent examples of True Womanhood. Suspecting Mrs. Fortune of some treachery, Senza and Constance then depart for Lord & Taylor to spy on her and Fanny Fern.
After Belle hurries off to arrive at Lord & Taylor before her mother, the domestics quickly finish their work so that they may enjoy their half-day off in Monroe Marketplace.
Act I, Scene 3: Fanny stands outside the doors of Lord & Taylor. The streets are bustling. Iwanna Fortune and her daughter, Belle, are shopping for Belles trousseau. Belle sings of how a proper young lady should act, pleasing her mother very much. After Mrs. Fortune leaves, Fanny approaches Belle, who reminds Fanny of herself in her youth. Fanny, endeavoring to give a proper education to Belle, explains the difference between being a pretty young girl and a middle-class housewife. Borrowing from her friend Mr. Dickens, Fanny shows Belle, the ghost of Future Bliss.
During the dream sequence, Belle quickly finds that she must not subject herself to Senza's dominion. Fanny urges Belle to persuade her new husband to "move far, far away from his mother."
Fanny continues Belles education by showing her the very real marriage present at Dr. Delusions Home for Disagreeable Women. Senza and Constance have arrived to witness Maddy and Luna, who are further along in their treatment, and who are now assisting in Mary Lee's treatment. Belle is horrified by what she sees and determines that she must find a way to help them. This awareness completes Belle's education.
Leaving Belle, Fanny sees Liza Dulin, an escaped slave, part-time performer at Almack's, and now caretaker of a high-class brothel. Fanny asks if there is any news about Lizas son who was sold as a child slave. Liza replies that there is no new information but she keeps hoping that one day he will escape and join her here. Fanny asks Liza for a favor. Kathleen and Bridget have now been caught with their boyfriends and dismissed by Senza. Although it would not be Fanny's preference, without references, there are few options for work. Liza, assures Fanny that as caretaker of a reputable house of illrepute, she will watch out for them. She has known both since they were children.
In the street, Bridget, Kathleen, Rachel and Liza accuse Mrs. Bliss, Purity and Fortune of being callous and hypocritical with regard to womankind ("If a woman once errs, kick her down"). The act ends with a question posed by Fanny to the A.F.R.A.I.D. group, "and what if you were they and they were you?" Would you believe the same?".
Act II: Senza calls the official meeting of A.F.R.A.I.D. to order and asks the newly reformed Maddy Broadbrim to lead the others in the national A.F.R.A.I.D. anthem. Mary Lee, newly escaped from Dr. Delusions, breaks into the meeting, followed by Rachel, Kathleen, Bridget, Luna, and Liza. She sings a satirical aria ("Ladies, ladies excuse me") about all that she has done to please her husband after having been re-educated at Dr. Delusion's. In the reformers quintet, Rachel campaigns for shorter work days and equal pay. Mary pleads for rights of the mentally ill and Luna leads the fight for suffrage and women's rights. Inspired by their bravery, Maddy joins in from her position for Temperance and Anti-tobacco. Liza now openly campaigns for abolition.
Senza tries to expel the interlopers, but is met with fierce resistance. Constance, trying to restore order, convinces Senza to allow them to stay. Senza delivers her address on True Womanhood.
Each of the Reformers rebuts Senza's address in their own manner. After Senza tells Mary Lee that as a divorcee, she is no better than a prostitute, Kathleen, Bridget and Liza ask "Why Are You Blamin' Everything On Us?" When Constance advises that "all are free in the Lord," Liza is prompted to sing "Freedom's Just a Word in a Book."
Iwanna Fortune, who has long been intimidated by Senza, is now convinced that she must join the reformers. She questions why Senza is so rigid in her beliefs, while Senza refuses to listen to anything said. In a powerful duet, long repressed emotions and beliefs are exposed. Senza, although showing a moment of vulnerability, becomes further entrenched within her walls of righteousness, while Mrs. Fortune is left questioning her whole life as she has lived it.
The reformers march off taking Maddy and Iwanna with them. Senza and Constance, leave in the opposite direction, even more resolute in their A.F.R.A.I.D. principles. Fanny ends the opera in a soliloquy hypothesizing each characters future, and quietly goes home to write her next column.
Brooklyn Repertory Opera Home Quality opera in Park Slope.


What is a Pre-Sale Termite/Pest Inspection?
A Pre-Sale Termite/Pest Inspection provides you with the information required to have your Ferny Hills home ready for sale, and ready to face a wave of potential Buyer's Pre-Purchase Inspectors.
It is common knowledge that most Ferny Hills home buyers will be required by their lenders/banks to have a Building and Pest Inspection performed, and most sales contracts are subject to Building and Pest Inspections.
The quickest way for a Buyer to get out of a sale contract or to ask for a reduced sale price is for their Pre-Purchase Inspector to find termite damage or activity in your Ferny Hills home.
Pre-Purchase Inspectors have a keen eye for detail and will quickly notice any termite activity and damage, as well as any dodgy handyman/DIY attempts to hide previous termite damage.
Your best chance at a quick and clean sale for your Ferny Hills Home is to have Silk's Pest Control perform a Pre-Sale Termite/Pest Inspection at your property so that you are aware of any termite related issues before you take your property to market.
What are the Benefits of a Pre-Sale Termite/Pest Inspection?
Pre-Sale Termite/Pest Inspections should identify any termite activity or damage in visually accessible areas in your home.
The Pre Sale Inspection Report for your home in Ferny Hills will also contain tips and advice relating to limiting conducive conditions that will attract termite activity to your home, such as repairing and redirecting water outlets from gutters and down pipes, the removal of timbers in ground contact, vegetation in contact with building structures, and the renewal of termite management systems just to name a few.
When a Buyer's Pre-Purchase Termite Inspector enters your property, you want to ensure that everything is in order so you can achieve the highest possible sale price for your Ferny Hills property.
If the Buyer's Pre-Purchase Inspector provides the Buyer with a report showing that the building has no visible termite problems or risk conditions and that it has a current Termite Management System is in place, then this will dramatically reduce the Buyers chance of justifying any price discounting.


text:
Sidelined? Hundreds of Navy SEALS told they won't be deployed if they refuse COVID vaccine
With deadline looming, SEALs in limbo after seeking religious exemption to shot. Lawyer seeks 90-day reprieve to avoid military readiness crisis.
By John Solomon
Updated: September 20, 2021 - 4:06pm
$500,000 and a year or more to fully train Navy SEALs
JAG™ corps official magazine
stirred criticism
Pope Francis declared earlier this month that "abortion is murder."
Several hundred elite Navy SEALs are in danger of being blocked from deploying with their special operator teams by the Pentagon after failing to get a mandatory COVID vaccine, according to a lawyer and pastor counseling them.
The number involved in the dispute with the Pentagon amounts to as many as a quarter or more of all active duty SEALs, a loss that could impact military readiness since SEAL teams play an outsized role in modern military operations, their advocates told Just the News. Some SEALS were given a deadline this week for the vaccine and have sought a religious exemption.
"My clients include several Navy SEALs who are a small part of a large group of SEALs and other military members who are being asked to choose between their faith and their ability to serve our nation," said R. Davis Younts, a lieutenant colonel in the Air Force reserves and a JAG lawyer who is representing several of the special operators as a private lawyer. "They have been told that if they seek a religious accommodation, they likely will no longer be able to serve our country as Navy SEALs and been given an arbitrary deadline to comply with the vaccine mandate.
"My clients need time, and we are seeking at least a 90-day extension to vaccine mandate compliance deadline they have been given."
Younts said the Pentagon has put its threat in writing that unvaccinated SEALs, including those who get a religious exemption or already have natural immunity, will be forbidden from deploying with their teams, all but ending their special operator careers. Some were given a deadline of this week, he said.
Pastor Jeff Durbin, a prominent anti-abortion activist and evangelical pastor from Arizona who has been ministering to the special operators for several weeks as they navigated the decision, said between a quarter to a third of all active-duty SEALS are involved in the dispute with the Pentagon, including some who already have COVID-19 immunity because they recovered from the disease.
"There are hundreds of Navy SEALs who have not been vaccinated, do not want to take the vaccine, or who have had and recovered from COVID and have the benefit of natural immunity," Durbin told Just the News. "A large number of SEALS that I am speaking on behalf of are facing the very difficult decision that even with a legitimate religious exemption that is based upon their commitments to Christ, the Gospel, God's Law, and the Constitution, they will no longer be Navy SEALs.
"They are essentially being asked to make a decision between their commitments to the lordship of Christ and their careers as Navy SEALs. Our country should be very concerned about what this would do to military readiness. Losing hundreds of Navy SEALs because of their legitimate and sincerely held Christian beliefs could be devastating to us as a nation."
The Pentagon referred comment to the Navy, which did not immediately respond with a comment. A Navy source would only confirm that Nov. 28 is the deadline for all Navy personnel to get shots.
Tim Parlatore, a lawyer who helped win the acquittal of Navy SEAL Eddie Gallagher in the alleged death of an ISIS prisoner, said he has confirmed large numbers of SEALS are declining to get the vaccine right now.
"It's in the hundreds. And it's not the senior leadership. It's all the shooters and it is going to have a huge impact," Parlatore said. "If they continue to with this asinine police you are going to have the complete decimation if the SEAL teams," he said.
Parlatore said the SEALS are not anti-vaccine; in fact they get all sorts of shots. He said they just believe more safety data needs to be be available to make their own judgment. And some already have immunity from surviving the disease, he noted.
Federal health regulators say the vaccine is safe for most Americans, while acknowledging some rare but serious adverse events, such as sudden cardiac disease for younger adults.
It reportedly takes up to $500,000 and a year or more to fully train Navy SEALs, among the most elite and celebrated of the military's special forces. SEALs shouldered a disproportionately heavy load during the war on terror the last two decades, with teams often deploying multiple times to war zones, including black-operations Team Six, which killed Osama bin Laden in 2011.
Younts' and Durbin's accounts were confirmed to Just the News by other lawyers representing special operators as well as several members of the SEAL community, who confirmed large numbers of special operators could be sidelined in the next few days. Most would only talk on background for fear of losing their jobs, but warned of a potential security calamity.
Eric Greitens, a retired Navy SEAL and the former Missouri governor now running for U.S. Senate, said the Pentagon's current position wrongly impacts the nation's defenses and the personal careers of men who have given so much to their nation.
"This is wrong for national security," Greitens said. "The only people who will benefit from destroying the combat capacity of Naval Special Operations are the Taliban, Russia, China and other adversaries around the world. This is also wrong at human level. These warriors have dedicated their lives to the nation, spent their youth and some of them their health defending this nation and now find themselves in trouble for no valid scientific, medical or military rationale. It is clear their out-of-control command is more concerned with political correctness than lethality, and thus is willing to squander national security and personal careers."
Younts, a Pennsylvania-based lawyer, has been involved in defending service members for nearly two decades, and won an award as the top Air Force defense lawyer in the JAG corps. His work and writings have been showcased in the JAG corps official magazine.
Durbin runs the large evangelical Apologia Church in the Phoenix area and is best known for his ardent opposition to abortion. In 2017, he stirred criticism when he suggested abortion be treated the same as murder, which under some state laws is punishable by the death penalty. His position on abortion as a crime, however, got recent support when Pope Francis declared earlier this month that "abortion is murder."
Durbin told Just the News he began ministering to Navy SEALs and other military members in recent weeks as they wrestled with the decision of whether to get the COVID-19 vaccine as mandated by the Pentagon. He said those he has counseled have a religious objection, are unable to speak publicly because of their allegiance to military discipline and know that even if they get a religious exemption they will be ending their SEAL careers if they refuse the shot under the current military position.
"These Navy SEALs are men of faith in Jesus Christ," he said. "They feel as though they are being pushed to a decision between their faith in Christ, their commitments to God's Law, and their desire to love their neighbors and uphold the principle of the preservation of human life versus their careers as Navy SEALs."
He said the SEALs he is ministering to "are the epitome of silent professionals and they do not desire to nor can they speak for themselves."
Following backlash, FBI calls synagogue incident a terror attack against Jewish community
'Massive cyber attack' hits Ukrainian government websites
ICE loses track of more than 47,000 illegal immigrants released into the U.S. since March


text:
namespace ash {
namespace internal {

namespace {
const int kPanelMarginEdge = 4;
const int kPanelMarginMiddle = 8;
const int kPanelIdealSpacing = 4;

const float kMaxHeightFactor = .80f;
const float kMaxWidthFactor = .50f;

// Duration for panel animations.
const int kPanelSlideDurationMilliseconds = 50;
const int kCalloutFadeDurationMilliseconds = 50;

// Offset used when sliding panel in/out of the launcher. Used for minimizing,
// restoring and the initial showing of a panel.
const int kPanelSlideInOffset = 20;

// Callout arrow dimensions.
const int kArrowWidth = 18;
const int kArrowHeight = 9;

class CalloutWidgetBackground : public views::Background {
 public:
  CalloutWidgetBackground() : alignment_(SHELF_ALIGNMENT_BOTTOM) {
  }

  virtual void Paint(gfx::Canvas* canvas, views::View* view) const OVERRIDE {
    SkPath path;
    switch (alignment_) {
      case SHELF_ALIGNMENT_BOTTOM:
        path.moveTo(SkIntToScalar(0), SkIntToScalar(0));
        path.lineTo(SkIntToScalar(kArrowWidth / 2),
                    SkIntToScalar(kArrowHeight));
        path.lineTo(SkIntToScalar(kArrowWidth), SkIntToScalar(0));
        break;
      case SHELF_ALIGNMENT_LEFT:
        path.moveTo(SkIntToScalar(kArrowHeight), SkIntToScalar(kArrowWidth));
        path.lineTo(SkIntToScalar(0), SkIntToScalar(kArrowWidth / 2));
        path.lineTo(SkIntToScalar(kArrowHeight), SkIntToScalar(0));
        break;
      case SHELF_ALIGNMENT_TOP:
        path.moveTo(SkIntToScalar(0), SkIntToScalar(kArrowHeight));
        path.lineTo(SkIntToScalar(kArrowWidth / 2), SkIntToScalar(0));
        path.lineTo(SkIntToScalar(kArrowWidth), SkIntToScalar(kArrowHeight));
        break;
      case SHELF_ALIGNMENT_RIGHT:
        path.moveTo(SkIntToScalar(0), SkIntToScalar(0));
        path.lineTo(SkIntToScalar(kArrowHeight),
                    SkIntToScalar(kArrowWidth / 2));
        path.lineTo(SkIntToScalar(0), SkIntToScalar(kArrowWidth));
        break;
    }
    // Hard code the arrow color for now.
    SkPaint paint;
    paint.setStyle(SkPaint::kFill_Style);
    paint.setColor(SkColorSetARGB(0xff, 0xe5, 0xe5, 0xe5));
    canvas->DrawPath(path, paint);
  }

  void set_alignment(ShelfAlignment alignment) {
    alignment_ = alignment;
  }

 private:
  ShelfAlignment alignment_;

  DISALLOW_COPY_AND_ASSIGN(CalloutWidgetBackground);
};

struct VisiblePanelPositionInfo {
  VisiblePanelPositionInfo()
      : min_major(0),
        max_major(0),
        major_pos(0),
        major_length(0),
        window(NULL),
        slide_in(false) {}

  int min_major;
  int max_major;
  int major_pos;
  int major_length;
  aura::Window* window;
  bool slide_in;
};

bool CompareWindowMajor(const VisiblePanelPositionInfo& win1,
                        const VisiblePanelPositionInfo& win2) {
  return win1.major_pos < win2.major_pos;
}

void FanOutPanels(std::vector<VisiblePanelPositionInfo>::iterator first,
                  std::vector<VisiblePanelPositionInfo>::iterator last) {
  int num_panels = last - first;
  if (num_panels == 1) {
    (*first).major_pos = std::max((*first).min_major, std::min(
        (*first).max_major, (*first).major_pos));
  }
  if (num_panels <= 1)
    return;

  if (num_panels == 2) {
    // If there are two adjacent overlapping windows, separate them by the
    // minimum major_length necessary.
    std::vector<VisiblePanelPositionInfo>::iterator second = first + 1;
    int separation = (*first).major_length / 2 + (*second).major_length / 2 +
                     kPanelIdealSpacing;
    int overlap = (*first).major_pos + separation - (*second).major_pos;
    (*first).major_pos = std::max((*first).min_major,
                                  (*first).major_pos - overlap / 2);
    (*second).major_pos = std::min((*second).max_major,
                                   (*first).major_pos + separation);
    // Recalculate the first panel position in case the second one was
    // constrained on the right.
    (*first).major_pos = std::max((*first).min_major,
                                  (*second).major_pos - separation);
    return;
  }

  // If there are more than two overlapping windows, fan them out from minimum
  // position to maximum position equally spaced.
  int delta = ((*(last - 1)).max_major - (*first).min_major) / (num_panels - 1);
  int major_pos = (*first).min_major;
  for (std::vector<VisiblePanelPositionInfo>::iterator iter = first;
      iter != last; ++iter) {
    (*iter).major_pos = std::max((*iter).min_major,
                                 std::min((*iter).max_major, major_pos));
    major_pos += delta;
  }
}

bool BoundsAdjacent(const gfx::Rect& bounds1, const gfx::Rect& bounds2) {
  return bounds1.x() == bounds2.right() ||
         bounds1.y() == bounds2.bottom() ||
         bounds1.right() == bounds2.x() ||
         bounds1.bottom() == bounds2.y();
}

gfx::Vector2d GetSlideInAnimationOffset(ShelfAlignment alignment) {
  gfx::Vector2d offset;
  switch (alignment) {
    case SHELF_ALIGNMENT_BOTTOM:
      offset.set_y(kPanelSlideInOffset);
      break;
    case SHELF_ALIGNMENT_LEFT:
      offset.set_x(-kPanelSlideInOffset);
      break;
    case SHELF_ALIGNMENT_RIGHT:
      offset.set_x(kPanelSlideInOffset);
      break;
    case SHELF_ALIGNMENT_TOP:
      offset.set_y(-kPanelSlideInOffset);
      break;
  }
  return offset;
}

}  // namespace

class PanelCalloutWidget : public views::Widget {
 public:
  explicit PanelCalloutWidget(aura::Window* container)
      : background_(NULL) {
    InitWidget(container);
  }

  void SetAlignment(ShelfAlignment alignment) {
    gfx::Rect callout_bounds = GetWindowBoundsInScreen();
    if (alignment == SHELF_ALIGNMENT_BOTTOM ||
        alignment == SHELF_ALIGNMENT_TOP) {
      callout_bounds.set_width(kArrowWidth);
      callout_bounds.set_height(kArrowHeight);
    } else {
      callout_bounds.set_width(kArrowHeight);
      callout_bounds.set_height(kArrowWidth);
    }
    GetNativeWindow()->SetBounds(callout_bounds);
    background_->set_alignment(alignment);
  }

 private:
  void InitWidget(aura::Window* parent) {
    views::Widget::InitParams params;
    params.type = views::Widget::InitParams::TYPE_POPUP;
    params.transparent = true;
    params.can_activate = false;
    params.keep_on_top = true;
    params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
    params.parent = parent;
    params.bounds = ScreenAsh::ConvertRectToScreen(parent, gfx::Rect());
    params.bounds.set_width(kArrowWidth);
    params.bounds.set_height(kArrowHeight);
    // Why do we need this and can_activate = false?
    set_focus_on_creation(false);
    Init(params);
    DCHECK_EQ(GetNativeView()->GetRootWindow(), parent->GetRootWindow());
    views::View* content_view = new views::View;
    background_ = new CalloutWidgetBackground;
    content_view->set_background(background_);
    SetContentsView(content_view);
    GetNativeWindow()->layer()->SetOpacity(0);
  }

  // Weak pointer owned by this widget's content view.
  CalloutWidgetBackground* background_;

  DISALLOW_COPY_AND_ASSIGN(PanelCalloutWidget);
};

////////////////////////////////////////////////////////////////////////////////
// PanelLayoutManager public implementation:
PanelLayoutManager::PanelLayoutManager(aura::Window* panel_container)
    : panel_container_(panel_container),
      in_add_window_(false),
      in_layout_(false),
      dragged_panel_(NULL),
      launcher_(NULL),
      shelf_layout_manager_(NULL),
      shelf_hidden_(false),
      last_active_panel_(NULL),
      weak_factory_(this) {
  DCHECK(panel_container);
  aura::client::GetActivationClient(Shell::GetPrimaryRootWindow())->
      AddObserver(this);
  Shell::GetInstance()->AddShellObserver(this);
}

PanelLayoutManager::~PanelLayoutManager() {
  if (launcher_)
    launcher_->RemoveIconObserver(this);
  if (shelf_layout_manager_)
    shelf_layout_manager_->RemoveObserver(this);
  Shutdown();
  aura::client::GetActivationClient(Shell::GetPrimaryRootWindow())->
      RemoveObserver(this);
  Shell::GetInstance()->RemoveShellObserver(this);
}

void PanelLayoutManager::Shutdown() {
  for (PanelList::iterator iter = panel_windows_.begin();
       iter != panel_windows_.end(); ++iter) {
    delete iter->callout_widget;
  }
  panel_windows_.clear();
  if (launcher_)
    launcher_->RemoveIconObserver(this);
  launcher_ = NULL;
}

void PanelLayoutManager::StartDragging(aura::Window* panel) {
  DCHECK(!dragged_panel_);
  dragged_panel_ = panel;
  Relayout();
}

void PanelLayoutManager::FinishDragging() {
  dragged_panel_ = NULL;
  Relayout();
}

void PanelLayoutManager::SetLauncher(ash::Launcher* launcher) {
  DCHECK(!launcher_);
  DCHECK(!shelf_layout_manager_);
  launcher_ = launcher;
  launcher_->AddIconObserver(this);
  if (launcher_->shelf_widget()) {
    shelf_layout_manager_ = ash::internal::ShelfLayoutManager::ForLauncher(
        launcher_->shelf_widget()->GetNativeWindow());
    WillChangeVisibilityState(shelf_layout_manager_->visibility_state());
    shelf_layout_manager_->AddObserver(this);
  }
}

void PanelLayoutManager::ToggleMinimize(aura::Window* panel) {
  DCHECK(panel->parent() == panel_container_);
  if (panel->GetProperty(aura::client::kShowStateKey) ==
      ui::SHOW_STATE_MINIMIZED) {
    panel->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL);
  } else {
    panel->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MINIMIZED);
  }
}

////////////////////////////////////////////////////////////////////////////////
// PanelLayoutManager, aura::LayoutManager implementation:
void PanelLayoutManager::OnWindowResized() {
  Relayout();
}

void PanelLayoutManager::OnWindowAddedToLayout(aura::Window* child) {
  if (child->type() == aura::client::WINDOW_TYPE_POPUP)
    return;
  if (in_add_window_)
    return;
  base::AutoReset<bool> auto_reset_in_add_window(&in_add_window_, true);
  if (!child->GetProperty(kPanelAttachedKey)) {
    // This should only happen when a window is added to panel container as a
    // result of bounds change from within the application during a drag.
    // If so we have already stopped the drag and should reparent the panel
    // back to appropriate container and ignore it.
    // TODO(varkha): Updating bounds during a drag can cause problems and a more
    // general solution is needed. See http://crbug.com/251813 .
    child->SetDefaultParentByRootWindow(
        child->GetRootWindow(),
        child->GetRootWindow()->GetBoundsInScreen());
    DCHECK(child->parent()->id() != kShellWindowId_PanelContainer);
    return;
  }
  PanelInfo panel_info;
  panel_info.window = child;
  panel_info.callout_widget = new PanelCalloutWidget(panel_container_);
  if (child != dragged_panel_) {
    // Set the panel to 0 opacity until it has been positioned to prevent it
    // from flashing briefly at position (0, 0).
    child->layer()->SetOpacity(0);
    panel_info.slide_in = true;
  }
  panel_windows_.push_back(panel_info);
  child->AddObserver(this);
  Relayout();
}

void PanelLayoutManager::OnWillRemoveWindowFromLayout(aura::Window* child) {
}

void PanelLayoutManager::OnWindowRemovedFromLayout(aura::Window* child) {
  if (child->type() == aura::client::WINDOW_TYPE_POPUP)
    return;
  PanelList::iterator found =
      std::find(panel_windows_.begin(), panel_windows_.end(), child);
  if (found != panel_windows_.end()) {
    delete found->callout_widget;
    panel_windows_.erase(found);
  }
  child->RemoveObserver(this);

  if (dragged_panel_ == child)
    dragged_panel_ = NULL;

  if (last_active_panel_ == child)
    last_active_panel_ = NULL;

  Relayout();
}

void PanelLayoutManager::OnChildWindowVisibilityChanged(aura::Window* child,
                                                        bool visible) {
  Relayout();
}

void PanelLayoutManager::SetChildBounds(aura::Window* child,
                                        const gfx::Rect& requested_bounds) {
  gfx::Rect bounds(requested_bounds);
  const gfx::Rect& max_bounds = panel_container_->GetRootWindow()->bounds();
  const int max_width = max_bounds.width() * kMaxWidthFactor;
  const int max_height = max_bounds.height() * kMaxHeightFactor;
  if (bounds.width() > max_width)
    bounds.set_width(max_width);
  if (bounds.height() > max_height)
    bounds.set_height(max_height);

  // Reposition dragged panel in the panel order.
  if (dragged_panel_ == child) {
    PanelList::iterator dragged_panel_iter =
      std::find(panel_windows_.begin(), panel_windows_.end(), dragged_panel_);
    DCHECK(dragged_panel_iter != panel_windows_.end());
    PanelList::iterator new_position;
    for (new_position = panel_windows_.begin();
         new_position != panel_windows_.end();
         ++new_position) {
      const gfx::Rect& bounds = (*new_position).window->bounds();
      if (bounds.x() + bounds.width()/2 <= requested_bounds.x()) break;
    }
    if (new_position != dragged_panel_iter) {
      PanelInfo dragged_panel_info = *dragged_panel_iter;
      panel_windows_.erase(dragged_panel_iter);
      panel_windows_.insert(new_position, dragged_panel_info);
    }
  }

  SetChildBoundsDirect(child, bounds);
  Relayout();
}

////////////////////////////////////////////////////////////////////////////////
// PanelLayoutManager, ash::LauncherIconObserver implementation:

void PanelLayoutManager::OnLauncherIconPositionsChanged() {
  // TODO: As this is called for every animation step now. Relayout needs to be
  // updated to use current icon position instead of use the ideal bounds so
  // that the panels slide with their icons instead of jumping.
  Relayout();
}

////////////////////////////////////////////////////////////////////////////////
// PanelLayoutManager, ash::ShellObserver implementation:

void PanelLayoutManager::OnShelfAlignmentChanged(
    aura::RootWindow* root_window) {
  if (panel_container_->GetRootWindow() == root_window)
    Relayout();
}

/////////////////////////////////////////////////////////////////////////////
// PanelLayoutManager, WindowObserver implementation:

void PanelLayoutManager::OnWindowPropertyChanged(aura::Window* window,
                                                 const void* key,
                                                 intptr_t old) {
  if (key != aura::client::kShowStateKey)
    return;
  // The window property will still be set, but no actual change will occur
  // until WillChangeVisibilityState is called when the shelf is visible again.
  if (shelf_hidden_)
    return;
  ui::WindowShowState new_state =
      window->GetProperty(aura::client::kShowStateKey);
  if (new_state == ui::SHOW_STATE_MINIMIZED)
    MinimizePanel(window);
  else
    RestorePanel(window);
}

void PanelLayoutManager::OnWindowVisibilityChanged(
    aura::Window* window, bool visible) {
  if (visible)
    window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL);
}

////////////////////////////////////////////////////////////////////////////////
// PanelLayoutManager, aura::client::ActivationChangeObserver implementation:

void PanelLayoutManager::OnWindowActivated(aura::Window* gained_active,
                                           aura::Window* lost_active) {
  // Ignore if the panel that is not managed by this was activated.
  if (gained_active &&
      gained_active->type() == aura::client::WINDOW_TYPE_PANEL &&
      gained_active->parent() == panel_container_) {
    UpdateStacking(gained_active);
    UpdateCallouts();
  }
}

////////////////////////////////////////////////////////////////////////////////
// PanelLayoutManager, ShelfLayoutManagerObserver implementation:

void PanelLayoutManager::WillChangeVisibilityState(
    ShelfVisibilityState new_state) {
  // On entering / leaving full screen mode the shelf visibility state is
  // changed to / from SHELF_HIDDEN. In this state, panel windows should hide
  // to allow the full-screen application to use the full screen.
  shelf_hidden_ = new_state == ash::SHELF_HIDDEN;
  for (PanelList::iterator iter = panel_windows_.begin();
       iter != panel_windows_.end(); ++iter) {
    if (shelf_hidden_) {
      if (iter->window->IsVisible())
        MinimizePanel(iter->window);
    } else {
      if (iter->window->GetProperty(aura::client::kShowStateKey) !=
              ui::SHOW_STATE_MINIMIZED) {
        RestorePanel(iter->window);
      }
    }
  }
}

////////////////////////////////////////////////////////////////////////////////
// PanelLayoutManager private implementation:

void PanelLayoutManager::MinimizePanel(aura::Window* panel) {
  views::corewm::SetWindowVisibilityAnimationType(
      panel, WINDOW_VISIBILITY_ANIMATION_TYPE_MINIMIZE);
  ui::Layer* layer = panel->layer();
  ui::ScopedLayerAnimationSettings panel_slide_settings(layer->GetAnimator());
  panel_slide_settings.SetPreemptionStrategy(
      ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
  panel_slide_settings.SetTransitionDuration(
      base::TimeDelta::FromMilliseconds(kPanelSlideDurationMilliseconds));
  gfx::Rect bounds(panel->bounds());
  bounds.Offset(GetSlideInAnimationOffset(
      launcher_->shelf_widget()->GetAlignment()));
  SetChildBoundsDirect(panel, bounds);
  panel->Hide();
  PanelList::iterator found =
      std::find(panel_windows_.begin(), panel_windows_.end(), panel);
  if (found != panel_windows_.end()) {
    layer->SetOpacity(0);
    // The next time the window is visible it should slide into place.
    found->slide_in = true;
  }
  if (wm::IsActiveWindow(panel))
    wm::DeactivateWindow(panel);
  Relayout();
}

void PanelLayoutManager::RestorePanel(aura::Window* panel) {
  panel->Show();
  Relayout();
}

void PanelLayoutManager::Relayout() {
  if (!launcher_ || !launcher_->shelf_widget())
    return;

  if (in_layout_)
    return;
  base::AutoReset<bool> auto_reset_in_layout(&in_layout_, true);

  ShelfAlignment alignment = launcher_->shelf_widget()->GetAlignment();
  bool horizontal = alignment == SHELF_ALIGNMENT_TOP ||
                    alignment == SHELF_ALIGNMENT_BOTTOM;
  gfx::Rect launcher_bounds = ash::ScreenAsh::ConvertRectFromScreen(
      panel_container_, launcher_->shelf_widget()->GetWindowBoundsInScreen());
  int panel_start_bounds = kPanelIdealSpacing;
  int panel_end_bounds = horizontal ?
      panel_container_->bounds().width() - kPanelIdealSpacing :
      panel_container_->bounds().height() - kPanelIdealSpacing;
  aura::Window* active_panel = NULL;
  std::vector<VisiblePanelPositionInfo> visible_panels;
  for (PanelList::iterator iter = panel_windows_.begin();
       iter != panel_windows_.end(); ++iter) {
    aura::Window* panel = iter->window;
    iter->callout_widget->SetAlignment(alignment);

    // Consider the dragged panel as part of the layout as long as it is
    // touching the launcher.
    if (!panel->IsVisible() ||
        (panel == dragged_panel_ &&
         !BoundsAdjacent(panel->bounds(), launcher_bounds))) {
      continue;
    }

    // If the shelf is currently hidden (full-screen mode), hide panel until
    // full-screen mode is exited.
    if (shelf_hidden_) {
      // The call to Hide does not set the minimize property, so the window will
      // be restored when the shelf becomes visible again.
      panel->Hide();
      continue;
    }

    gfx::Rect icon_bounds =
        launcher_->GetScreenBoundsOfItemIconForWindow(panel);

    // If both the icon width and height are 0 then there is no icon in the
    // launcher. If the launcher is hidden, one of the height or width will be
    // 0 but the position in the launcher and major dimension is still reported
    // correctly and the panel can be aligned above where the hidden icon is.
    if (icon_bounds.width() == 0 && icon_bounds.height() == 0)
      continue;

    if (panel->HasFocus() ||
        panel->Contains(
            aura::client::GetFocusClient(panel)->GetFocusedWindow())) {
      DCHECK(!active_panel);
      active_panel = panel;
    }
    icon_bounds = ScreenAsh::ConvertRectFromScreen(panel_container_,
                                                   icon_bounds);
    gfx::Point icon_origin = icon_bounds.origin();
    VisiblePanelPositionInfo position_info;
    int icon_start = horizontal ? icon_origin.x() : icon_origin.y();
    int icon_end = icon_start + (horizontal ? icon_bounds.width() :
                                 icon_bounds.height());
    position_info.major_length = horizontal ?
        panel->bounds().width() : panel->bounds().height();
    position_info.min_major = std::max(
        panel_start_bounds + position_info.major_length / 2,
        icon_end - position_info.major_length / 2);
    position_info.max_major = std::min(
        icon_start + position_info.major_length / 2,
        panel_end_bounds - position_info.major_length / 2);
    position_info.major_pos = (icon_start + icon_end) / 2;
    position_info.window = panel;
    position_info.slide_in = iter->slide_in;
    iter->slide_in = false;
    visible_panels.push_back(position_info);
  }

  // Sort panels by their X positions and fan out groups of overlapping panels.
  // The fan out method may result in new overlapping panels however given that
  // the panels start at least a full panel width apart this overlap will
  // never completely obscure a panel.
  // TODO(flackr): Rearrange panels if new overlaps are introduced.
  std::sort(visible_panels.begin(), visible_panels.end(), CompareWindowMajor);
  size_t first_overlapping_panel = 0;
  for (size_t i = 1; i < visible_panels.size(); ++i) {
    if (visible_panels[i - 1].major_pos +
        visible_panels[i - 1].major_length / 2 < visible_panels[i].major_pos -
        visible_panels[i].major_length / 2) {
      FanOutPanels(visible_panels.begin() + first_overlapping_panel,
                   visible_panels.begin() + i);
      first_overlapping_panel = i;
    }
  }
  FanOutPanels(visible_panels.begin() + first_overlapping_panel,
               visible_panels.end());

  for (size_t i = 0; i < visible_panels.size(); ++i) {
    if (visible_panels[i].window == dragged_panel_)
      continue;
    bool slide_in = visible_panels[i].slide_in;
    gfx::Rect bounds = visible_panels[i].window->GetTargetBounds();
    switch (alignment) {
      case SHELF_ALIGNMENT_BOTTOM:
        bounds.set_y(launcher_bounds.y() - bounds.height());
        break;
      case SHELF_ALIGNMENT_LEFT:
        bounds.set_x(launcher_bounds.right());
        break;
      case SHELF_ALIGNMENT_RIGHT:
        bounds.set_x(launcher_bounds.x() - bounds.width());
        break;
      case SHELF_ALIGNMENT_TOP:
        bounds.set_y(launcher_bounds.bottom());
        break;
    }
    bool on_launcher = visible_panels[i].window->GetTargetBounds() == bounds;

    if (horizontal) {
      bounds.set_x(visible_panels[i].major_pos -
                   visible_panels[i].major_length / 2);
    } else {
      bounds.set_y(visible_panels[i].major_pos -
                   visible_panels[i].major_length / 2);
    }

    ui::Layer* layer = visible_panels[i].window->layer();
    if (slide_in) {
      // New windows shift up from the launcher  into position.
      gfx::Rect initial_bounds(bounds);
      initial_bounds.Offset(GetSlideInAnimationOffset(alignment));
      SetChildBoundsDirect(visible_panels[i].window, initial_bounds);
      // Set on launcher so that the panel animates into its target position.
      on_launcher = true;
    }

    if (on_launcher) {
      ui::ScopedLayerAnimationSettings panel_slide_settings(
          layer->GetAnimator());
      panel_slide_settings.SetPreemptionStrategy(
          ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
      panel_slide_settings.SetTransitionDuration(
          base::TimeDelta::FromMilliseconds(kPanelSlideDurationMilliseconds));
      SetChildBoundsDirect(visible_panels[i].window, bounds);
      if (slide_in)
        layer->SetOpacity(1);
    } else {
      // If the launcher moved don't animate, move immediately to the new
      // target location.
      SetChildBoundsDirect(visible_panels[i].window, bounds);
    }
  }

  UpdateStacking(active_panel);
  UpdateCallouts();
}

void PanelLayoutManager::UpdateStacking(aura::Window* active_panel) {
  if (!active_panel) {
    if (!last_active_panel_)
      return;
    active_panel = last_active_panel_;
  }

  // We want to to stack the panels like a deck of cards:
  // ,--,--,--,-------.--.--.
  // |  |  |  |       |  |  |
  // |  |  |  |       |  |  |
  //
  // We use the middle of each panel to figure out how to stack the panels. This
  // allows us to update the stacking when a panel is being dragged around by
  // the titlebar--even though it doesn't update the launcher icon positions, we
  // still want the visual effect.
  std::map<int, aura::Window*> window_ordering;
  for (PanelList::const_iterator it = panel_windows_.begin();
       it != panel_windows_.end(); ++it) {
    gfx::Rect bounds = it->window->bounds();
    window_ordering.insert(std::make_pair(bounds.x() + bounds.width() / 2,
                                          it->window));
  }

  aura::Window* previous_panel = NULL;
  for (std::map<int, aura::Window*>::const_iterator it =
       window_ordering.begin();
       it != window_ordering.end() && it->second != active_panel; ++it) {
    if (previous_panel)
      panel_container_->StackChildAbove(it->second, previous_panel);
    previous_panel = it->second;
  }

  previous_panel = NULL;
  for (std::map<int, aura::Window*>::const_reverse_iterator it =
       window_ordering.rbegin();
       it != window_ordering.rend() && it->second != active_panel; ++it) {
    if (previous_panel)
      panel_container_->StackChildAbove(it->second, previous_panel);
    previous_panel = it->second;
  }

  panel_container_->StackChildAtTop(active_panel);
  if (dragged_panel_ && dragged_panel_->parent() == panel_container_)
    panel_container_->StackChildAtTop(dragged_panel_);
  last_active_panel_ = active_panel;
}

void PanelLayoutManager::UpdateCallouts() {
  ShelfAlignment alignment = launcher_->alignment();
  bool horizontal = alignment == SHELF_ALIGNMENT_TOP ||
                    alignment == SHELF_ALIGNMENT_BOTTOM;

  for (PanelList::iterator iter = panel_windows_.begin();
       iter != panel_windows_.end(); ++iter) {
    aura::Window* panel = iter->window;
    views::Widget* callout_widget = iter->callout_widget;

    gfx::Rect current_bounds = panel->GetBoundsInScreen();
    gfx::Rect bounds = ScreenAsh::ConvertRectToScreen(panel->parent(),
                                                      panel->GetTargetBounds());
    gfx::Rect icon_bounds =
        launcher_->GetScreenBoundsOfItemIconForWindow(panel);
    if (icon_bounds.IsEmpty() || !panel->layer()->GetTargetVisibility() ||
        panel == dragged_panel_) {
      callout_widget->Hide();
      callout_widget->GetNativeWindow()->layer()->SetOpacity(0);
      continue;
    }

    gfx::Rect callout_bounds = callout_widget->GetWindowBoundsInScreen();
    gfx::Vector2d slide_vector = bounds.origin() - current_bounds.origin();
    int slide_distance = horizontal ? slide_vector.x() : slide_vector.y();
    int distance_until_over_panel = 0;
    if (horizontal) {
      callout_bounds.set_x(
          icon_bounds.x() + (icon_bounds.width() - callout_bounds.width()) / 2);
      distance_until_over_panel = std::max(
          current_bounds.x() - callout_bounds.x(),
          callout_bounds.right() - current_bounds.right());
    } else {
      callout_bounds.set_y(
          icon_bounds.y() + (icon_bounds.height() -
                             callout_bounds.height()) / 2);
      distance_until_over_panel = std::max(
          current_bounds.y() - callout_bounds.y(),
          callout_bounds.bottom() - current_bounds.bottom());
    }
    switch (alignment) {
      case SHELF_ALIGNMENT_BOTTOM:
        callout_bounds.set_y(bounds.bottom());
        break;
      case SHELF_ALIGNMENT_LEFT:
        callout_bounds.set_x(bounds.x() - callout_bounds.width());
        break;
      case SHELF_ALIGNMENT_RIGHT:
        callout_bounds.set_x(bounds.right());
        break;
      case SHELF_ALIGNMENT_TOP:
        callout_bounds.set_y(bounds.y() - callout_bounds.height());
        break;
    }
    callout_bounds = ScreenAsh::ConvertRectFromScreen(
        callout_widget->GetNativeWindow()->parent(),
        callout_bounds);

    SetChildBoundsDirect(callout_widget->GetNativeWindow(), callout_bounds);
    panel_container_->StackChildAbove(callout_widget->GetNativeWindow(),
                                      panel);
    callout_widget->Show();

    ui::Layer* layer = callout_widget->GetNativeWindow()->layer();
    // If the panel is not over the callout position or has just become visible
    // then fade in the callout.
    if (distance_until_over_panel > 0 || layer->GetTargetOpacity() < 1) {
      if (distance_until_over_panel > 0 &&
          slide_distance >= distance_until_over_panel) {
        layer->SetOpacity(0);
        // If the panel is not yet over the callout, then delay fading in
        // the callout until after the panel should be over it.
        int delay = kPanelSlideDurationMilliseconds *
            distance_until_over_panel / slide_distance;
        layer->SetOpacity(0);
        layer->GetAnimator()->StopAnimating();
        layer->GetAnimator()->SchedulePauseForProperties(
            base::TimeDelta::FromMilliseconds(delay),
            ui::LayerAnimationElement::OPACITY);
      }
      {
        ui::ScopedLayerAnimationSettings callout_settings(layer->GetAnimator());
        callout_settings.SetPreemptionStrategy(
            ui::LayerAnimator::REPLACE_QUEUED_ANIMATIONS);
        callout_settings.SetTransitionDuration(
            base::TimeDelta::FromMilliseconds(
                kCalloutFadeDurationMilliseconds));
        layer->SetOpacity(1);
      }
    }
  }
}

////////////////////////////////////////////////////////////////////////////////
// keyboard::KeyboardControllerObserver implementation:

void PanelLayoutManager::OnKeyboardBoundsChanging(
    const gfx::Rect& keyboard_bounds) {
  // This bounds change will have caused a change to the Shelf which does not
  // propogate automatically to this class, so manually recalculate bounds.
  OnWindowResized();
}

}  // namespace internal
}  // namespace ash

redpajama_set_name: RedPajamaGithub


text:
The perfect storm that shut down Idasa
Richard Calland
Last year workers at Harmony Gold's Kusasalethu mine went on strike for higher salaries. The mine's management and the unions have until March to solve the latest wage dispute.
IDASA (1987-2013)
It had, unlike many, survived the transition to democracy in 1994 by reinventing itself under Wilmot James and – briefly – Mamphela Ramphele, with new programmes on budget process, public opinion and parliamentary monitoring.
This led to advances in budget transparency and rights-based budgeting, setting new global standards, and work with Kader Asmal on a lasting parliamentary disclosure regime for outside financial interests.
A gap in parliamentary oversight was filled by Idasa's offspring, the Parliamentary Monitoring Group.
Founded by former politicians Frederik van Zyl Slabbert and Alex Boraine in 1987 as the Institute for a Democratic Alternative in South Africa, Idasa has a proud place in South Africa's history books for its convening of the Dakar meeting of ANC exiles and nationalists from home, an early step in talks to end apartheid.
Idasa's foremost capability was knowing who needed to be in the room and then how best to facilitate dialogue, a trait once integral to this country's political DNA, now faded, as Marikana showed so catastrophically.
So, if Idasa can fall, then what hope for the many other organisations that are in crisis? After all, with its customary pragmatism, Idasa had under Paul Graham's careful stewardship found "new markets" across the continent in the past decade. But in developing new programmes that linked the democratic process with socioeconomic outcomes, in other words, procedural democracy with substantive issues of equality and development, it may well have overestimated the sophistication of the donor community, which prefers to pigeonhole organisations in neat little boxes.
Idasa grew exponentially during the mid-2000s, doubling its budget and its size, from 80 to 160 full-time staff – just in time for the 2008 global economic crisis.
It was hit by a perfect storm. Donors slashed budgets, especially to countries deemed sufficiently strong and middle-income and exchange-rate fluctuations messed with the best-laid budget plans. Moreover, now that it was "re-granting" to partners around the continent, Idasa underestimated the complexity as well as the cost of doing so, while, as a consequence of tighter budgets, it was losing some of its most effective staff at the worst possible time.
In response to this crisis in the funding of non-governmental organisations, it is tempting to say that civil society should adapt and find a way of living without foreign grants. This is fine in principle, but in practice there is no tradition of philanthropic grant-making in South Africa, least of all for democracy work, from which most corporates shy – except, that is, when secretly filling the bank accounts of the ANC or the Democratic Alliance.
Corporate leaders are quick to complain about the infirmities of the democratic system and the consequent political risk, but they are very slow to fund organisations willing to work independently on issues of accountability and transparency. Today's johnny-come-lately organisations pontificate about money, politics and the arms deal, but it was Idasa's work on these issues 10 years ago that ensured that they got the public prominence they deserved.
Critics of Idasa, especially within the nationalist wing of the ruling party, who liked to try to write us off as "liberals", will be quietly rejoicing. Idasa always had enemies across the political spectrum. This was a sure sign that it was doing something right.
Richard Calland worked for Idasa from 1995 to 2011.
Keep the powerful accountable
Subscribe for R30/mth for the first three months. Cancel anytime.
Subscribers get access to all our best journalism, subscriber-only newsletters, events and a weekly cryptic crossword.
Richard Calland is an associate professor in public law at the University of Cape Town and a founding partner of the Paternoster Group.
IDASA
Civil society must hold governments to account
Idasa's demise a lesson for African NGOs
Time to come clean on party funding
Outcry over ANC 'hijack' of information Bill
Councillors' training 'lacks transparency'
ANC targets minority vote
WELCOME TO YOUR M&G
Already a subscriber? Sign in here
New era of health science for Africa as NantSA launches...
M&G Premium
The first locally manufactured Covid-19 vaccine from the new facility, which is based in Cape Town, is expected within the next year
Eunice Stoltz
SAA to revive Durban route
The beleaguered national carrier resumed flights between Johannesburg and Cape Town last September after exiting business rescue
Sarah Smit
Top Six
'Partygate': A timeline of Boris Johnson's latest scandal
The UK Prime Minister defended some of the events — quickly dubbed "partygate" since they were reported in newspapers from late last year — as work gatherings.
Freedom of speech wins over right to privacy in court...
The supreme court of appeal says an animal rights activist had the right to 'out' a farmer on Facebook.
sheree bega
Loading latest Press Releases…


text:
Wrestling drops second straight meet
By Luke Holthouse
The last two wrestling meets before semester break ended in defeat for the varsity wrestling team this week. The Wolverines lost to Alemany 60-15 on Monday before losing to Chaminade 54-21 on Wednesday.
The team will take a break from competition over the next two weeks due to midterms. The Wolverines have one more duals meet on Jan. 31 at Bishop Amat before league finals begin on Feb. 4.
Once the team reaches the post season, the team will shift its focus from team-oriented meets to more individual-oriented meets. While the team as a whole is relatively inexperienced, Head Coach Gary Bairos said that a couple of the more experienced wrestlers such as displayed great individual performances this week against Alemany and Chaminade and should qualify for CIF playoffs. Bairos was particularly impressed by the job of his co-captain Brandon Chen '12, who wrestles in the 147-pound weight class and is considered the best on the team by Bairos.
"I think that Brandon Chen is our leader, he's really been coming on strong," Bairos said. "We have a lot of high hopes for him."
head coach gary
holthouse
Boys soccer team defeats Crossroads High School
A Manager's World: The Sideline Story


If you wish to send any details regarding your request for feedback to professionals before entering their details, we have a template email which can be amended and sent. You can find this under 'Info for Expert Witnesses'.
Once you have entered their and clicked 'Send Email', the system will automatically send an email to the recipient. The email will explain what MAEP is and why you are requesting the feedback. The email will also contain a link to the feedback questionnaire which is linked directly to your assessment. This will allow the outcomes to be automatically included in your report.
Recipients have the option to not give feedback. In these cases, the recipient will contact the MAEP team stating that they do not wish to participate, and the MAEP team will delete their details from the system - you may not be notified.
If both the above actions have been completed, contact the MAEP team.


Afer this humiliating failure for our political class, we need a new constitutional settlement.
Roll up, roll up for the Brexit blame game, it's waiting to take you away.
Not since Robert Walpole became the first prime minister 298 years ago has this country seen such a prolonged and deep political crisis. Not since the struggle between Catholic and Protestant factions calmed in Britain (if not in Ireland) after the 17th century has there been so much deep intolerance, hatred and violence simmering just below the surface. Whatever happens in the next few weeks and months, we can confidently expect the anger and aggression to deepen still further.
Hundreds of books will be written about why Britain's relationship with the European Union became so deep and divisive. In truth though, it is not hard to see why. Membership of the EU goes to the very heart of national identity and people's sense of personal security. It is not just about what people think or where they perceive their economic interest to lie; it is about who they are. It is precisely because people's views on the subject are often not based on reason that we find it so hard to understand and respect the views of each other.
To me, and I suspect many New Statesman readers, remaining in the EU, for all the disappointments with aspects of it, was a no-brainer. When Britain entered the EU in 1973, it was known as "the sick man of Europe" and had a stagnating economy marred by an inflexible manufacturing sector and labour disputes. By the time it voted to leave, Britain had become a dynamic service-based economy, the fastest growing in the G7. It led the world in soft power, London was the number-one capital in the world and Britain had acquired a reputation as one of the most creative, open and tolerant nations on earth. Why risk all this? How could the EU be such an incubus if all this occurred during Britain's membership? This was the argument that No 10 should have made during the referendum campaign. But to others, membership looked very different. They either don't see the truth of these facts, or they believe that other factors such as the purity of national sovereignty trump them.
This was a national quarrel long in the making. To blame David Cameron for calling the referendum misses the point. The issue would not have gone away. It would have broken through the nation's political crust to explode in 2020 or 2025, and possibly even more dangerously for the suppression. The best we can do is to civilise and shape the anger, and ensure that not only the settlement with Europe but the British constitution emerges in much better shape. Because, by the early 21st century, the British political settlement that emerged after the Glorious Revolution of 1688 had become fundamentally no longer fit for purpose. As with the United Nations, it needs radical reform if our nation is to be preserved and to flourish.
Like many Remainers, I have been repeatedly disappointed by our politicians over the previous 40 years for failing to negotiate a settled "outer rim" status for Britain within the EU. We could have removed ourselves from the drive to ever greater political and economic union, but done so in a way that allowed us to benefit from the trading, cultural, social and security benefits of belonging to a bigger club as the world re-pivots on to a new bipolar axis.
The 2016 referendum was a chance to have conducted a civilised national debate about the issue that had been the dominant divide within the Conservative Party since Britain's first application in 1961, and an increasingly divisive issue within the Labour Party. Instead of a high-minded and empirical debate, No 10 chose to personalise the campaign, focusing on narrow economic factors while seeking to demean those on the other side. "Stop demonising Brexiters: their side is full of good people who have serious concerns about the EU," I wrote to Cameron's team in early June 2016. "We hear you," the message came back.
But they didn't hear me. They intensified their pugilistic, distorted and negative campaign still more as polling day approached. "Project Fear" was a stupid schoolboy error that brought discredit to Remain. Thursday 16 June was the last moment when sanity could have been re-established. On that day, shortly before 1pm, Thomas Mair shot and fatally stabbed the 41-year-old Jo Cox. She was the first sitting MP to be murdered since the Conservative, Ian Gow, who was assassinated by the Provisional IRA in 1990. Cox's murder was utterly shocking and should have been a wake-up call to the dark forces that were in play. But after a brief pause, the referendum circus rolled on, and exactly a week later Vote Leave won by the slim margin of 51.9 per cent to 48.1 per cent.
Nearly three years later, we are little clearer about how we will leave the EU or our future relationship with it. Eighty-one per cent of voters now think the government is handling negotiations badly, according to recent NatCen polling. In the short term, our economy is holding up, but the miasma and battles of the past three years have meant that the government has taken its eye off the ball of many pressing issues such as housing, education and crime, while achieving, it would appear, little or nothing. Above all, little planning has taken place for how to bring the nation together after this, and how to heal the divides. During the Second World War, government had for several years been engaged in planning economically, socially and culturally for post-war Britain. Today, the cupboard is bare.
We have to analyse who has been responsible for this national humiliation, which easily eclipses any other crisis since 1945, including Suez in 1956, the devaluation of 1967, the IMF crisis in 1976, Black Wednesday in 1992 or the Iraq War in 2003. As Winston Churchill said on the front cover of Guilty Men, written notably by Michael Foot but published in 1940 under the pseudonym "Cato", "the use of recriminating about the past is to enforce effective action at the present". There is a place, he was saying, for apportioning blame.
Cato's 15 targets in 1940 were the British politicians who appeased Nazi Germany and failed to do more to rearm Britain in the 1930s. Guilty Men rode a tide of national anger that shaped popular and scholarly thinking for 20 years, but is now seen as jejune and unbalanced. The risks of the blame game are significantly greater in 2019 than in 1940 because our national energies are not being expended on fighting a common enemy: given the right inflammatory material, fanned by our febrile social media, uncontrolled blame can turn citizen against citizen and community against community.
The menacing messages and death threats received by former Labour MP Luciana Berger, former Conservative MP Anna Soubry and Labour MP Lloyd Russell-Moyle, attacked in his own constituency in Brighton, show Streeting's caution is well placed. Why do we tolerate this violence and hatred, and why is it disproportionately targeted against women? It is deeply troubling. The more we tolerate the venting of hatred and blame, the more those of unstable or hate-filled minds will be tipped into violence. How many deluded figures have been inspired by the far-right extremist who killed 50 in Christchurch in March to enact similar acts of hatred on our own shores? Blame can be a dangerous game.
So we must be very careful apportioning it, and do so only with circumspection. Just a few names are singled out here, all people of power. Prime among those guilty of the sin of deceit is Dominic Cummings, who came off lightly in James Graham's television play about Brexit, The Uncivil War. So consumed was Cummings by his cause that he lost all sense of what was true and fair. For the sin of distortion, blame is primarily placed on press moguls, whose newspapers for many years painted the EU in a relentlessly disparaging light, prime among them being Rupert Murdoch, the Telegraph owners the Barclay brothers, and Paul Dacre, former editor-in-chief of the Daily Mail. Those cheeky bad-boys of Brexit, Nigel Farage and Arron Banks, knowingly whipped up fear of immigration in pursuit of their goal.
Some rich people piled money into the Brexit cause out of personal greed, callously disregarding that the least advantaged in the country would be the most likely to suffer. For a deficit of leadership Jeremy Corbyn must be named for singly failing to define a clear and principled strategy for Labour on this crucial issue, favouring gamesmanship. David Cameron too failed to lead the nation as a statesman, choosing instead a negative and belittling campaign devoid of values that offered no grand vision of how remaining and being a world power would best guarantee Britain's future strength and security. The establishment at large failed to heed the growing concerns of the disaffected across the country, to the loss of all.
But the standout candidate for the sins of gloating, hubris and frivolity is Boris Johnson, the amoral MP for Uxbridge who believes he is the spiritual heir to Winston Churchill. He failed Remainers, moderate Brexiteers and the nation.
Others can, have and will blame a whole range of people. Theresa May is in the sights of many (a worrying metaphor). To others, it is parliamentarians or the Commons Speaker, John Bercow, who are most in the line of fire. To others it is the civil service, including its late head Jeremy Heywood, who died just before Christmas, and chief negotiator Olly Robbins who are the targets. The EU, above all the unholy trinity of Jean-Claude Juncker, Michel Barnier and Donald Tusk, are on the hit-list of many. To the Full English Brexit tendency, such as the European Research Group, anything less than a full-blooded Leave is a betrayal. If their romantic ideal of a return to Britain in the 1950s, or 1850s, fails to materialise, all are guilty – all bar them.
Roll up, roll up for the Brexit blame game, it's waiting to blow you away.
Britain badly needs statesmen of deep humanity and imagination to steer us into the next phase of our history. The first Truth and Reconciliation Commission was held in Uganda in 1974, which sought to bring together the deeply divided country to inquire into the disappearance of its citizens since 1971. Most famously, South Africa's commission was formed in 1995 in the aftermath of apartheid. We will need figures of the stature of Nelson Mandela and Desmond Tutu if we are to heal our nation after Brexit is over. We will need to seek the truth about the deceits and dishonesty that have taken place, but without retribution, and in the spirit of building a new nation.
Because nothing less than rebuilding the nation is required. We need to reunify around a common set of values. At present, it is hard to say what beliefs if any unite a fisherman in Newlyn, Cornwall, a computer programmer in Cardiff and a social worker in Inverness. The strong possibility is that Scotland will become a separate nation within the EU: if, however, it is to remain part of the UK, much more has to be found to unite us. Leaving the EU nudges Ireland two green clicks further towards reunification, and we will need to work hard to build new bonds of friendship in that tortured relationship across the Irish Sea. The Queen has been a major unifying force for nearly 70 years. Not for much longer. What then? Only with her death will we realise the full loss of her cohesive force.
Britain needs a new constitutional convention, the likes of which we have not seen since for 330 years. As the historian David Starkey has argued, such a new settlement is required to determine whether we should be a parliamentary or popular democracy. As we approach the 200th anniversary of the Great Reform Act of 1832, we must ask why we still require the electorate to travel to polling booths to vote, and explore how the new digital technologies allow altogether more immediate ways of ensuring that we have a living democracy.
Next year marks the 150th anniversary of William Gladstone's reforms establishing the modern civil service. It has served the nation extraordinarily well, and as with our independent judiciary, we should guard it against politically motivated attacks from hot-headed partisans. But both the judicial and executive branches need to be better representations of British society today, and the civil service needs to ensure it is stronger in long-term and proactive thinking. The game-changing issues of artificial intelligence, global warming and future employment need to be more deeply understood and anticipated than at the present. Brexit was yesterday's battle, fought with yesterday's weapons. Parliament too needs root and branch reform, above all to the upper house, if it is to serve the country properly.
Britain is at its most precarious point since the threatening days of 1939-40 when Nazi invasion was a real possibility, or the winter of 1916 after the abject failure at the Somme to achieve its objectives. We have trashed our Prime Minister, now a diminished figure, without any clear understanding of who might succeed her or what their fresh policy prospectus might be. In December 1916, David Lloyd George replaced the failing Herbert Asquith while holding a new plan for winning the war. In May 1940, Churchill replaced the failing Neville Chamberlain with a determination to take the war to Germany. In January 1957, Harold Macmillan replaced Anthony Eden after Suez, again with a new plan for national recovery.
Today, we have no one of the stature of Lloyd George, Churchill or Macmillan. And there is no plan on the table, or lurking underneath it. Our greatest folly would be to imagine that Britain is destined to remain a great, united nation and an economically strong nation. Italy, Spain and the Netherlands all rose and fell. So too might Britain. If we let blame run rife, we will rip ourselves apart. Three things are needed: statesmen, a truth and reconciliation commission, and a new constitutional convention.
Roll up, roll up for the national blame game, it's dying to take you away.


text:
package cn.nowdo.cloud.base.wx.utils;

import java.net.URI;
import java.net.URISyntaxException;

import org.apache.http.client.utils.URIBuilder;

public class WxURIFactory {

	private final static String WX_BASE_URL = "api.weixin.qq.com/cgi-bin/";

	public static URI getWxAccessTokenURI( String appId,
			String secret) throws URISyntaxException {
		URIBuilder uriBuilder = new URIBuilder().setScheme("https")
				.setHost(WX_BASE_URL).setPath("token")
				.setParameter("grant_type", "client_credential")
				.setParameter("appid", appId).setParameter("secret", secret);

		return uriBuilder.build();
	}

	public static URI getWxSendCustomMessageURI(
			String accesssToken) throws URISyntaxException {
		URIBuilder uriBuilder = new URIBuilder().setScheme("https")
				.setHost(WX_BASE_URL).setPath("message/custom/send")
				.setParameter("access_token", accesssToken);

		return uriBuilder.build();
	}

	public static URI getWxCreateCustomMenuURI(
			String accesssToken) {
		URIBuilder uriBuilder = new URIBuilder().setScheme("https")
				.setHost(WX_BASE_URL)
				.setPath("menu/create")
				.setParameter("access_token", accesssToken);

		try {
			return uriBuilder.build();
		} catch (URISyntaxException e) {
			e.printStackTrace();
		}

		return null;
	}

	public static URI getWxCreateQRCodeURI(String accesssToken) throws URISyntaxException {
		URIBuilder uriBuilder = new URIBuilder().setScheme("https")
				.setHost(WX_BASE_URL).setPath("qrcode/create")
				.setParameter("access_token", accesssToken);

		return uriBuilder.build();
	}

	public static URI getWxUserListURI(
			String accesssToken) throws URISyntaxException {
		URIBuilder uriBuilder = new URIBuilder().setScheme("https")
				.setHost(WX_BASE_URL).setPath("user/get")
				.setParameter("access_token", accesssToken);

		return uriBuilder.build();
	}

	public static URI getWxUserListURI(
			String accesssToken, String nextOpenId) throws URISyntaxException {
		URIBuilder uriBuilder = new URIBuilder().setScheme("https")
				.setHost(WX_BASE_URL).setPath("user/get")
				.setParameter("access_token", accesssToken)
				.setParameter("next_openid", nextOpenId);

		return uriBuilder.build();
	}
}


If you do your own web pages and would like to embed the GuidedPath login controls (UserName, Password, Forgot Password?, Password Reset) into your webpage you can either do this yourself or forward this article to your website manager.
Download the attached GuidedPath.js file.
Place the GuidedPath.js file in the head of the page in which you would like to embed the GuidedPath logon controls.
This will create an iFrame that allows your users to securely logon to GuidedPath, directly from your web pages!