On today's Visual Studio Toolbox, Paul's going to show us a couple of ways to add security to WPF apps. Hi, welcome to Visual Studio Toolbox. I'm your host Robert Green and joining me today is Paul Sheriff. Hey, Paul. Hey, Robert, how are you? Great. Welcome on the show. Thank you. Thank you. It's been many years. It's good to be back. Yeah. Paul and I have known each other for a very, very long time, so I'm glad that you had an opportunity to come on the show and talk to us about adding security to WPF applications. Well, I've been doing a lot of WPF lately with a client, and we had to add this in, and I'd written this years ago, so it was nice to actually come back around and clean it up for the latest stuff lately, so it's been nice. Cool. It can be an important topic, but I can imagine it's not necessarily intuitive how to get started doing it. I think you agree with that. Not really because unlike the web apps, that Microsoft kind of includes it right out of the box, there's nothing for WPF, so it's basically roll your own. You wrote an article about this that was in a recent issue of Code Magazine. We'll put a link to that that has the full write-up as well as the code. But here, I thought you could give us kind of a quicker and not dirtier because it's the same code, but a quicker overview of how it all works. What do you think? That sounds like a good idea. Let's jump into it. All right, let's do it. Well, I thought, Robert, it might be important to start out with the goals of why you need a security system. The major goals are really just let's make controls disappear, right? Hit item or collapse them. Let's make some other controls might need to be disabled. You might want some to be read-only. I think the major goal, which we're going to get to is do all these disks without having to recompile code. Yes. Right? So that would be the ideal. So we're going to kind of build up to that. But I thought I'd take you through a little screen. So I made a little screen here where we've got a new button. We've got some employee data and then we got a save button. And maybe we want to hide that new button. We want to disable the employee ID. Maybe we want to hide the salary text box, disable the SSN and maybe disable the save button. So I thought I'd kind of show you going through basically securing this form. We're going to do it a couple of different ways because I've got a couple of different techniques. And I'll point out the good and the bad of each one of those. So here we are in Visual Studio. And I wrote a little sample app and we'll give you a link to this as well. So you'll be able to download this exact sample. I've got four samples for you, four or five actually. Now here's a question first. Are you relying on any particular version of the .NET framework or any particular version of Visual Studio here? You know, I'm not. I've used this sample for many, many years. It's written using the latest. So Visual Studio 2019, but it should work fine in just about anything. Okay. Yeah, good question though. All right, so what I've done in this one, you can see that screen has popped up. But notice that the salary box is gone, that the SSN is disabled and the save button is disabled. And I thought I'd show you just a little bit about what I'm doing here. So underneath in the loaded event for the window loaded, you can see on line 22. I call this set security principle. And one of the things you typically want to do when you're doing windows security, and I'm just using the windows security right now. So built-in roles, whatever you have set up are groups, AD groups. You could also do your own generic principle here if you wanted to. But it's important to set that principle into the thread. Once you've done that, I've got, as you can see on line 25, I'm calling a view model because this is WPF, so MVVM. ViewModel.secureControls. And if we take a look, what I'm doing is I'm grabbing the current principle, and then I'm gonna just use the isInRole method. I'm sure a lot of you are familiar with that. And we can check to see if a user is in the user's role, maybe the administrator's role, the supervisor role. And all I'm doing is I'm tying that to some properties here. IsInUser'sRole, isInAdminRole, isInSupervisorRole. So I've got some different properties up here that you can see. I'm simply doing the raise property changed. So I've got those three. I also added a couple other ones because I said, hey, maybe I wanna be in a user's or supervisor role, or isInAdmin or isInSupervisorRole. And that's basically the amount of code that I have for this particular sample. Now, let's take a look at my main window here. And what I've done is I've simply used a user control called employee control. And this is that control that I showed you on the slides. So you can see that here. But let's take a look at the XAML because this is where everything happens here. So down here in the XAML on that new button, I have a visibility property and look at the path. Am I in the user's or supervisor role? And then I'm using a converter for the visibility converter, of course. So each one of these visibility is read only. The down here we've got the isAdminRole, you use supervisor role for each control that you want to secure, you simply bind it up to a property. Did you have to write that converter? The visibility? That's built-in WPF converter. All I had to do was make a resource out of it. That's very simple to do. There's some problems with this. Let's talk about those problems before I show you how we fix it. So instead, what we wanna do is map a table in a database to a set of security objects. So here I've got a table with an element identifier such as new button, employee ID, salary, those match up to that user control that we saw. I have a mode which could be collapsed, read only, hidden, disabled. And those are the modes that we have in WPF and in the role. So if the user's in one of these roles, this common limited list, then we're not gonna collapse it, we're not gonna make it read only, we're not gonna make it hidden, otherwise it would be. So we're gonna take the data out of this table, we're gonna map it into a list of what I call security control objects. So we've got each one of those fields is mapped up to each property. And then we're gonna use that to apply to this screen. And the way we do that is we simply match up the element identifier to each button's name or maybe a tag property. So I wanted to give us a couple, kinda give us some flexibility so we could map up the element identifier to the name or the tag. And all we have to do then is once we have that list of security control objects, we loop through the controls on the form, find that form and then we either set it disabled or collapsed or whatever it says to do. So let's take a look at how we do that. Okay. So what I've done now, Robert, is I've taken and I've broken out things into a couple of different projects. I have a WPF security project. And this will make it easier for the users when they download this to be able to take this DLL and put it right into their application. I also did create, in this particular instance, I created this security control class that we saw that has those various properties, container name, element identifier, mode. And all we're gonna do is map this from SQL server to here, eventually. What I'm gonna do for right now, just to keep things really simple. And let's see if I can find this. I apologize, there we go. Is I'm gonna go ahead right now and just hard code this in. So just so we can see what this looks like and then we'll just take it from the database in the next one. But here you can see. So I was going to, it did look like you were hard coding that and if you made any changes to who got to do what, you'd have to recompile the code. But this is an interim step. Exactly. And it really just makes it easier for me to explain how we get from step B, step A to step B, right? Right. All right. So what I'm doing is again, I've got the container name, which is our employee control. So you can see the employee control right here. Then we have the element identifier, which is the new button or the employee ID and then what the mode is gonna be. Okay. And oops. Don't click on those. What the mode's gonna be and then the roles as a string. And I made this one users one, two, three. And then we're gonna go ahead and run this. I'll show you what it looks like first and then we're gonna just step through the code really quickly. Because it's not a lot of code. All right. See, the new button is gone. Okay. If I then come back here and I change this to users, I should be in the user's role on my machine. It comes back. Yeah. All right. Now let's take a look. Cause what's important now is I got rid of all of those bindings. Mm-hmm. Okay. No visibility, no read only.  Okay. So that's great. So that means all we're doing now is we're matching it up on the name or maybe a tag element if I'm using a tag like right down here. Yeah. All right. So now let's go ahead and step through this and we'll see how this works. So I'll set a break point right here. So I changed the secure controls from last time because I need to pass in an instance, right? This instance of this particular form because I need to be able to go through the controls in that form, don't I? Yes. To match those up. Excellent. And I've called employee control because I may have more than one or two or three or 10 different forms and I wanna be able to have one table and be able to specify which form I'm on so we know which set of controls to get. All right, hopefully that's clear as much. All right, so let's drive into this. So we come into the secure controls and the first thing I'm gonna do is I'm gonna get the current principal. I'm gonna call this load controls to secure and this is where we're gonna now jump into that one that we just built, right? That has the hard coded values. Okay. Then we're gonna go through and I'm just gonna use a little bit of WPF code to grab all the controls in the container. And we can take a look at this. I'll let you kind of look at this in more depth later but all it is is a recursive call to loop through and grab all of the different objects and I'm gonna create a list basically of all of the controls that are on this particular screen. And one of the key things I'm doing here is I'm gonna check to see whether we should consider this control that I just grabbed for security. So that means that it either has to have a control name or a tag name, right? The name property or the tag name has to be set. Okay. Because if not, I don't have any way to match it up to those controls, do I? So I would need to make sure those are there. And then as you can see, I'm gonna go through and look for any child objects and I'm gonna recursively call this until we're all done. When I'm all done, set a break point here, I now have a list of those controls that either have a name or a tag property and there's only five of them. And if we look, those are the ones that we saw that I wanna now connect up to, right? The new button, the employee ID, the salary, the social security number, the save button. All right. So now all I'm gonna do is that you find that you typically use name or tag because if you're ever going to reference a control in code, you'll wind up naming it but it may not need to be secured, right? Oh, I'm so glad you asked that. Oh, I'd like to remind my straight man for today. The last sample that I have is if you don't wanna set the name or the tag but you have a binding, we can do it on the binding as well but that's a lot more code. So I wanted to start out this way first and then later I'll show you how to actually do it with a binding. So you don't even have to have the name or the tag property. Got it. Okay. Yeah. All right, cool. Nice straight man there. So the first thing I'm gonna do is I'm gonna simply go through in my look now for that element identifier and see if I found it in that control. Hey, I did. Great. So now that I found it, all I have to do now is check to see, hey, let's loop through the roles now and am I in one of those roles? Okay, and if I am, I skip it, I don't have to do anything. Let's then go to the next control. We're gonna search for that one. We found it. And now we're gonna check and say, hey, am I in any one of those roles? Oops, I'm not. So this control that we're on, which is the employee ID, okay? What mode am I gonna do? Read only, okay? So we come into this method that I call change state and all I'm doing is checking to see what came from that mode, right? That disabled read only and I'm gonna then set the appropriate thing. So in read only, I'm gonna set the is enabled equal to true and the visibility to true and then I'm gonna change, what? There is read only property, okay? So I'm taking from whatever it was before, making sure it's wiped out and then I'm gonna apply whatever it was. I'm using just a little bit of reflection here, okay? So I'm using a little reflection but this is the quick way to do it when you do the set value, okay? This is the way the entity framework does it, not the old way. So this is very efficient to do and I'm gonna set that controls is read only property to true. So we just do this for every single control and when we're done, I hit F5 here, everyone's been set to whatever those security permissions are. All right, now that's the first thing. Now the next one we're gonna do, right? So now what we're gonna do is we wanna take that data and get it out of SQL Server. So we're not gonna hard code it anymore. So what we'll do is we'll have a securitycontrol.sql file and what I've done is I've simply created that little table that I showed you in that screenshot in the slides and I've also given you this sample data here. So I created this in my SQL Server and you will create this as well in order to get this particular application to work. Now the way that this works is I had to change a couple of things. So first off, the load controls to secure is no longer hard coded. As you can see now, I'm using a class called securitycontrolmanager and it has getsecuritycontrols. If we go over to this particular guy here, I'm simply using a little entity framework code. I've got a security context, a DB context setup called WPF Security DB context and I'm going out to grab the data from that security control table. That's what gives me my control list. All right. Then after that, everything else is pretty much the same. Let's go ahead, set our breakpoint again. We'll go ahead and run. And the nice thing about this is you now don't have to look through every single control in the form. You already know what the list of controls is, right? That's true, because you wrote the form, right?  So all you're doing is going into the SQL Server database and adding or taking away controls based on what you need. All right, so if we take a look, the code for the secure controls, exactly the same. The only difference is this particular method here, the load control secure goes to the database now that then loads up the controls in XAML. It then loops through all the code. Same exact code. Isn't that nice? So we just switched from the hard coded version now to the database version. Excellent. So now we don't have to redistribute anything. Now we can just change something in our database. But there's one more thing. That's what you asked about earlier, Robert. So it's, if we take a look at now, if you don't wanna set the name or you don't wanna set the tag, I added one more bit of code on it. And I'll show you the little changes that I had to make here. And if we take a look at my user control, and again, we'll look at the XAML. And so now you can see on the button, okay? I did still have it in there, I apologize, but if the button doesn't have any bindings, I do need a name, okay? Now look, no name or tag on the text box, there's just the binding. That employee ID has that same exact identifier, and I can use that. Same thing with the first name or last name. So I've gotten rid of name or tag when I can, okay? And if you don't wanna use name, because you don't wanna have it show up in your code behind, you can always use the tag as well. Because remember that's still there as well, that's an option, all right? So it just depends on what you wanna, you have an option of name, tag, or binding. What do you typically use more often than not in real life? I try to use the binding because normally I'm trying to bind something that, you know, I'm trying to secure something that is bound. Okay. But for buttons, right? Because sometimes I don't want it, I don't want some user to save a button or click on that save button. They can save, that's one of their permissions that they don't have. Then I have to use name or tag. Now, if you think about it, the name, I usually have a click event associated with this. So I typically have a name on it anyway, cause I want a nice name to show up for the click event. Right, okay. So now let's take a look at a couple of little things that I added here, okay? So one of the things is, when I go into the secure controls here, and I load the controls, that hasn't changed. The load controls in the XAML container. So if we scroll down here, this most of this code is the same, but I marked it out right here, begin new code. This is the only new code I added. So in this one, I have a method called get binding names. So I'm gonna pass in the control as we're looping through the set of controls on the form, right? Or on the, I'm gonna say take this control and let's go find out what the binding property is. So this is all the code I had to write to actually figure out. So I had to figure out code by code, or I had to figure out control by control, which value would have that bound property? And then I grab that property and I can then get the binding expression. This is built into WPF. Cool. So once I have that binding expression, I can get the path. And remember what the path is? We go back here. The path is that. Yep. And that's what I can do next table, right? There was just one more thing that I had to do and it's this line of code immediately after the new code I added, get binding name. It's that consider for security. If you remember before, we considered a control to be secureable if it had a name or a tag property, right? And now as you can see, I had to add one more, is there a binding path? So if it has a binding path, a control name or a tag, we can consider this for security. And that's it. That's all the changes we had to make. So we now have it accomplished our goals. We can make any control read only. We can make it hidden. We can make it collapsed. We can do disabled. And we can do it all from a database table and with just a little bit of code. And I've given you a nice class library that you'll be able to drop this right into your application. Very, very cool. Do you, have you tried this in UWP? You know, I haven't, but I don't see any reason why it wouldn't work exactly the same way. I guess it depends on, do you have the same ability to read the paths and dig down into the controls, right? The binding expression might be the only thing. That might be a little bit different under UWP. Everything else should be the same because we're just using the reflection there and that's still available in UWP. Yeah, and then you have the same question of how would you do this in something like Xamarin? Yeah, that could be maybe a little bit more difficult. I'm not sure you have all those expressions, so. Right. Yeah, but there you go. Easy way, I think, to secure your WPF app. Very, very cool. Right. So all of these samples and the full article will put links to in the show notes so people can go try this out themselves. Absolutely. And thank you so much for coming on and showing us this, Paul. Well, thanks for having me on. I appreciate it and we'll see you again soon. All right, I hope you guys enjoyed that and we will see you next time on Visual Studio Toolbox.


Ladies and gentlemen, the Vice President and I are very pleased to welcome you to our press conference. We will now report on the outcome of today's meeting of the Governing Council, which was also attended by the Commission Vice President, Mr. Dombrowski. Based on our regular economic and monetary analysis, we decided to keep the key ECB interest rates unchanged. We continue to expect them to remain at present or lower levels for an extended period of time and well past the horizon of our net asset purchases. Regarding non-standard monetary policy measures, we confirm that our net asset purchases at the new monthly pace of 60 billion euros are intended to run until the end of December 2017, or beyond if necessary, and in any case until the Governing Council sees a sustained adjustment in the path of inflation consistent with its inflation aim. The net purchases will be made alongside reinvestments of the principal payments from maturing securities purchased under the asset purchase program. Our monetary policy measures have continued to preserve the very favorable financing conditions that are necessary to secure a sustained convergence of inflation rates towards levels below but close to 2% over the medium term. Incoming data, since our meeting in early March, confirm that the cyclical recovery of the euro area economy is becoming increasingly solid and that downside risks have further diminished. At the same time, underlying inflation pressures continue to remain subdued and have yet to show a convincing upward trend. Moreover, the ongoing volatility in headline inflation underlines the need to look through transient developments in HICP inflation which have no implication for the medium term outlook for price stability. A very substantial degree of monetary accommodation is still needed for underlying inflation pressures to build up and support headline inflation in the medium term. If the outlook becomes less favorable or if financial conditions become inconsistent with further progress towards a sustained adjustment in the path of inflation, we stand ready to increase our asset purchase program in terms of size and or duration. Let me now explain our assessment in greater detail, starting with the economic analysis. Euro area real GDP increased by 0.5% quarter on quarter in the fourth quarter of 2016 following a growth rate of 0.4% in the third quarter. Incoming data, notably survey results, bolster our confidence that the ongoing economic expansion will continue to firm and broaden. The pass-through of our monetary policy measures is supporting domestic demand and facilitates the ongoing deleveraging process. The recovery in investment continues to benefit from very favorable financing conditions and improvements in corporate profitability. Employment gains, which are also benefiting from past labor market reforms, are supporting real disposable income and private consumption. Moreover, the signs of a stronger global recovery and increasing global trade suggest that foreign demand should increasingly add to the overall resilience of the economic expansion in the Euro area. However, economic growth continues to be dampened by a sluggish pace of implementation of structural reforms, in particular in product markets, and by remaining balance sheet adjustment needs in a number of sectors. The risks surrounding the Euro-era growth outlook while moving towards a more balanced configuration are still tilted to the downside and related predominantly to global factors. Headline inflation has been recovering from the very low levels seen in 2016, largely owing to higher energy price increases. After reaching 2% in February 2017, Euro area annual HICP inflation stood at 1.5% in March. This reflected mainly lower energy and unprocessed food price inflation, but also a decline in services price inflation. Looking ahead on the basis of current futures price for oil, headline inflation is likely to increase in April, and thereafter to hover around current levels until the end of this year. However, as unutilized resources are still weighing on domestic wage and price formation, measures of underlying inflation remain low and are expected to rise only gradually over the medium term, supported by our monetary policy measures, the expected continuing economic recovery, and the corresponding gradual absorption of slack. Turning to the monetary analysis, Broad Money M3 continues to expand at a robust pace with an annual rate of growth of 4.7% in February 2017, after 4.8% in January. As in previous months, annual growth in M3 was mainly supported by its most liquid components with a narrow monetary aggregate M1 expanding at an annual rate of 8.4% in February 2017, unchanged from the previous month. The recovery in loan growth to the private sector observed since the beginning of 2014 is proceeding. The annual growth rate of loans to non-financial corporations declined to 2% in February 2017 from 2.3% in the previous month, while the annual growth rate of loans to households remained broadly stable at 2.3% in February. At the same time, the Euro Area Banklanding Survey for the first quarter of 2017 indicates that the net loan demand has increased and bank lending conditions have further eased across all loan categories. The pass-through of the monetary policy measures put in place since June 2014 continues to significantly support borrowing conditions for firms and households and credit flows across the Euro Area. To sum up, a cross-check of the outcome of the economic analysis with the signals coming from the monetary analysis confirmed the need for a continued, very substantial degree of monetary accommodation to secure a sustained return of inflation rates towards levels that are below but close to 2% without undue delay. In order to reap the full benefits from our monetary policy measures, other policy areas must contribute much more decisively to strengthening economic growth. The implementation of structural reforms needs to be substantially stepped up to increase resilience, reduce structural unemployment, and boost productivity and potential output growth. Regarding fiscal policies, all countries should intensify efforts towards achieving a more growth-friendly composition of public finances. A full and consistent implementation of the stability and growth pact and of the macroeconomic imbalances procedure over time and across countries remains crucial to enhance the resilience of the Euro Area economy and we are now at your disposal for questions. Claire Jones, Financial Times. Thank you. Mr Draghi, was there any support today from members of the Council to say that the risks to the outlook were now balanced rather than to the downside, or was that a majority view? And should Emmanuel Macron's secure victory on May 7, would you then regard the risks to the economic outlook as balanced? Thank you. Thank you. Well, the answer to the second question first, we actually don't do monetary policy based on likely election outcomes. But on the first question, we actually had a discussion on exactly on the balance of risks as far as growth is concerned, not inflation. It's an important distinction that I want to mark. And some of the members who had a more, I would say, sanguine view of the economic situation and others while acknowledging that there have been improvements on which I would say a few words later on in the growth outlook, believed that such improvements would not warrant any change in the economic situation as far as the balance of risks are concerned. In the end, the Governing Council agreed about this language that basically says that the one I've read before that says the risks surrounding your area growth outlook while moving towards a more balanced configuration are still tilted to the downside and related predominantly to global factors. You remember that in the previous formulation we only said they remain tilted on the downside. So the Governing Council agreed about this and I should say all members of the Governing Council agreed about this formulation so we can actually speak of unanimity in this. Let me also add that as far as inflation or risk to inflation outlook, there weren't really different views. The behavior of inflation as it stands was basically shared by everybody. Thank you, Andrea Skamke from Reuters in Frankfurt. Let me follow up on the inflation you mentioned in January. I think you gave us four criteria for the inflation that are needed or become better over the course of the time. I would be interested in your assessment on this four criteria. And my second question, very German thing, Mr. Scheuble, was very, very critical in Washington at the IMF meeting about your monetary policy calling it not helpful what is your reaction on this. Thank you. As I said at the time, we don't comment politicians' statements about our monetary policy. And only to say that it's pretty ironic to hear these comments from people who've supported the independence of monetary policy, the independence of central bank all throughout. But let me now say something about inflation. Headline inflation declined stronger than expected in March, reflecting lower inflation rates for all main components. And underlying inflation remains subdued. The short-term outlook was revised down due to lower oil prices and a weaker starting point for underlying inflation. Indicators of pipeline pressures show tentative signs of buildup of producer prices and upward pressure at the early stages of the pricing chain. Wage growth has been picking up slightly from a very subdued level, yet the outlook for wage growth remains uncertain. So market-based expectations... Well, we can talk about market-based expectations. So in terms of my criteria, the assessment hasn't really changed. The criteria are basically that the inflation path should converge towards our aim of an inflation rate of below by close to 2%. It should be a durable convergence, so not essentially produced by transient factors like we've seen in the headline inflation recently. It should be very important. It should be self-sustained. The present inflation path is predicated on maintaining the strong monetary accommodation in place. And so the self-sustained means that it will stay there even without such strong monetary accommodation on our side. And, of course, the inflation we talk about has to relate to the whole of the Eurozone and not to one country only. Mr. Ferles? Thank you. Tom Ferles from the Wall Street Journal. My first question was on the sequencing of the exit when it comes from QE. In your statement, you reiterated the forward guidance, but at the last meeting, you seemed to suggest there was some room for flexibility there. My question was, is there any likelihood of a change? And is there kind of a gray area where the interest rates could be raised before the end of the net asset purchases, but after the QE has started to be wound down? My second question was on the... More generally, it's six years since the ECB raised interest rates just ahead of the Eurozone crisis, a decision that was subsequently criticised. In that case, you were focusing very closely on inflation and you seemed to miss or subsequently criticised for missing the broader economic situation. Today, you're once again very focused on inflation, and even as the economy picks up, how much of a risk is there that a similar policy mistake could be repeated? Thanks. I'm not sure I get the logic of the second question, but I'll try to answer that anyway. Now, first of all, on the first question, the sequencing. I don't think there is any need to discuss this now. We have not seen any evidence or any sufficient evidence to alter our assessment about the inflation outlook, and we are not sufficiently confident that inflation will converge to levels consistent with our inflation aim in a durable and self-sustaining manner. So, from today's standpoint, there is no reason to deviate from the indications we have been consistently providing in the introductory statement to this press conference. But let me also just repeat what I said in the speech at the ECB Watchers Conference. The morning council deems the current stance fully appropriate. It confirmed at its last meeting that net asset purchase will continue until the end of December 2017 or beyond. This implies that our various policy instruments are deliberately chained together in such a way that the forward guidance applied to our asset purchase program, which is time and state dependent, extends also to our interest rate policy. So, our forward guidance is de facto on the entire package, not on any specific component of it. And this guidance relates not just to the conditions under which we would withdraw stimulus, i.e., the sustained adjustment in the path of inflation, but also to the sequence of measures we would use to do so. So, from today's perspective, the negative rates in conjunction with the other elements of our easing package have turned out to be powerful in terms of easing financial conditions. And the potential negative side effects have so far been limited. We can discuss this later. So, the current wording of our forward guidance reflects exactly this assessment of side effects. And from today's standpoint, I don't see cause to deviate from the indications we've been consistently providing in the introductory statement. Now, the second question, the logic of which... Oh, yes, oh, yes, if I can rephrase it. Is the experience of we had in 2011 going to be repeated today? Actually, I think it's the other way around. In 2011, we forget, but we actually had a high rate of inflation for several months above 2%. So, that was the situation. We are now not having a high rate of inflation above 2%. We actually have a very subdued underlying inflation rate and volatile headline inflation led by developing oil prices and unprocessed food prices. So, the situation is different. Thank you. Mr. Schraus? Mark Schraus, Börsen Zeitung, thank you. If I got it right, there's one sentence missing in the statement and this is the sentence, there are no signs yet of a convincing upward trend of underlying inflation. What is the reason? No, I got it right. Wrong? No, I think you're right. In a sense, there is one sentence less, but this one is there. In page 2, you have, moreover, the ongoing volatility in headline inflation underlines the need to look... ...convincing upward trend. If you read at the end of page 1, beginning of page 2... ...the assessment of the underlying inflation trend, that was finally the question. So, that is that. No, the one that is not equal exactly like the other state is the balance of risks sentence, which repeated twice that the risks remain tilted on the downside in the last statement and it's only once, you can find it only once in page 2. That's the difference. And the second question would be what is the governing council's estimate of the Nairu of the equilibrium unemployment rate at the moment? Thank you. Well, we don't have an estimate of the Nairu at the moment. We base our estimates on a variety of indicators. So, in this sense, we avoid the trap of being linked to a precise number, which depends on a variety of factors. And we use a fairly wide range of indicators to inspire informal policymaking. Thank you. Hello, Mr. President. You were talking about the fact that risks are moving towards being more broadly balanced. Is that supposed to signal the slow beginning of a more substantial policy shift? And how do you feel about the consensus view that June might be a good moment to reassess the forward guidance? And my second question is, in the past two days, including last night's dinner, have you talked about how you might eventually tackle an exit from stimulus and how you might communicate that? Tackle an exit from stimulus and how you will communicate that? Thank you. Thank you. We haven't discussed either today, but it's true that the growth is improving. Things are going better. And you remember, in 2013, we were speaking of a recovery which was fragile and uneven, and now it's solid and broad. And just let me give you a few numbers. The growth has averaged 0.4 percent quarter after quarter since 2013. But the important point is also that this recovery has broadened, which wasn't the case before. We have, you know, I think I've hinted at that or explained that in other occasions, we have a dispersion index of value-added growth, showing how a value-added grows in different countries, and now it's at historical minimum. It's at the same level as when in 1997. The PMI is the highest since 2011. So is the economic sentiment index. The unemployment rate is the lowest since May 2009, though it's still at 9.5 percent. And this may tell something, may tell something about the need to do structural reform because there's no doubt that some of this unemployment is structural and not cyclical. And the employment figure is even more impressive. The Euro-era employment increased by almost 5 million jobs over the last three and a half years, offsetting virtually all of the employment losses seen over the crisis period. Now, incidentally here, the employment creation should benefit the poorer households, so this is a response to those who are criticized in our asset purchase program as increasing inequality. There is no better measure to improve inequality, to improve equality, in fact, than increasing employment. And in fact, consumption, which is the primary driver of this recovery, is led by an increase in real disposable income, which is led not so much by wage increases, but by employment gains. The risks of deflation have virtually disappeared. Market-based inflation expectations, however, have shown a behavior which they have been increasing until February, then they declined, now they seem to be there, and now they do reflect an underlying behavior of the inflation risk premium, which in turn reflects mostly developments outside the eurozone in the United States and perhaps some political uncertainty everywhere. However, the survey-based measures suggest that long-term inflation expectations have remained anchored. Also, the financing conditions and credit demand are going well. If you think the growth rate of credit has increased by 5 percentage points, going from negative to positive, by the way, in the last three or four years. Also, one of the symptoms of fragmentation, which was the difference in loan rates, both funding rates for banks and lending rates, now has somewhat disappeared. Basically, the spreads do, by and large, reflect different risk situation, risk premium. So, all in all, even leverage, to some extent, has decreased, especially in the private sector, in the NFC part. Now, so all in all, the improvements are there, have been continuing, have been broadening, but we still have many fragilities, one of which, speaking of leverage, is given by the fragility in the banking sector, and the NPL stocks in many countries that could have a much higher credit growth if it not been for the NPLs. Sorry? We haven't discussed that. No, I thought I answered that for being a very big game. Mr. Malin? Jan Malin, hundreds, but thank you. Have you discussed today to change the forward guidance that rates remain at present or lower levels and was there a broad majority to keep it as it is? And my second question, the ECB has somehow a track record of raising rates too early in history. For example, in 2008 or in 2011, and there's also the experience of the taper tantrum in the US, how much or to what extent does that play a role for your, or how does that affect your policies today, these experiences? Thank you. Thank you. Well, I think the answer to the second question is no, it doesn't affect. I mean, we are young enough in our mental processes that we can make a difference between facts, assessments, and history. So we judge and take our decisions based on the facts and on the analysis of the outlook. On the other point, we didn't discuss it. We didn't discuss it. And it was, you see, most of the, actually the discussion focused really on the balance of risks concerning growth, not inflation. Your question is related to what we call easy imbiases, no? Both the lower and the other. Now these imbiases are actually linked to inflation. In other words, these imbiases are meant to cope with tail risks concerning the inflation rate, not growth directly. It's quite clear that as growth perspectives improve, certainly the probability of these tail risks may go down. But we are not there yet. Thank you. Mr. Daniels? Good afternoon. Harry Dunge from Life's Walk News. Just to be clear, there were no discussions about raising deposit rates at the meeting over the last two days. And secondly, on the Securities Lending Facility, there is sort of growing expectation that ECB could bring a more meaningful improvement to its securities lending conditions as we saw back in the last year. Was that discussed or is there any sort of movement on that? Better security lending. Securities lending, no. We didn't discuss this. But we have to accept the fact that the security lending is a decentralized activity that's carried out by the different national and central banks. According to common guidelines, of course, but it's carried out by different national and central banks, not at the ECB level. Thank you. Mr. Merly? Alessandro Merly of Il Sole 24 ore. There is a mention of global factors and the while ago you also mentioned the United States. There was considerable uncertainty about the policies of the Trump administration. You just come back from Washington where no doubt you've had contacts with members of the administration. Did you get any further clarity on that from your meetings in Washington or from their public pronouncements there? Well, not really. We are... I think the main conclusion is that it would be premature to react or make policy decisions based on future policies pursued by the U.S. administration at this point in time. We could say that one thing, perhaps, one has to be very tentative in this... One thing that may have come out of the meetings is that perhaps the risk of protectionism or trade protectionism may have somewhat receded. The second point is that certainly markets are in the course, not us, but markets are in the course of reassessment of the U.S. fiscal policy. And I, frankly, wouldn't feel like going beyond that. Mr. Bohdermann? Thank you. Mark Bohdermann, NSA, Anders Blatt. Mr. Draghi, you just mentioned the dispersion index on growth which has improved, but you also said there was some discussion in the council today on how to value economic growth at the moment in the Euro area. In particular, in Italy, GDP growth is still lagging behind. So maybe even so that a tightening of monetary policy could come too soon. So my question is whether when deciding on the degree of monetary policy accommodation in the coming months, do you only look at averages of growth or also at individual countries? Thank you. Well, you answered yourself. I mean, we look at averages. Our mandate is not expressed in any individual country inflation. By the way, growth is not part of our mandate. So our mandate is price stability and that is expressed in terms of the rate of inflation for the whole of the Eurozone. This is Claudio Perret from El País. The European Commission and the International Monetary Fund are talking clearly about the end of convergence of economic and social convergence in the Eurozone. Do you feel that this trend could reduce the support for the Euro from the European citizens, especially in the periphery, in the countries where the convergence has disappeared? Well, the support of the Euro, the environmental estimates remains pretty high. It's 70 percent across the Euro area and it's more than 50 percent in old countries, each and every one. So according to this measure the support for the Euro is still very strong. To ignore the social uneasiness would also be a mistake with the IMF and especially the European Commission are quite right about being aware and alert to this. And it's quite clear now everybody would acknowledge that the globalization had extraordinary benefits but also created losers that were not taken into account for several years and were not was not considered now the commission especially I think rightly so doesn't at all backtrack from the benefits of globalization that would not be the right right way to go but certainly should have much greater social consideration for the ones who don't gain or actually get harmed by the globalization. Mr. Jacous? Klaus and Jacous at the German television. Mr. President I would like to touch on a point that I've been in for many years that is the fact that you constantly ask member states and politicians to help your policy by reforms and structural reforms and so on given the fact that unfortunately we don't really see any of this help and looking at the four criteria you have outlined how confident is the ECB council to reach those criteria if there is a continuation in this lack of support from the political side and secondly given that you of course have a kind of neutral and independent position is there any way for the ECB to trigger such political support thank you very much. Thank you I will answer the second question and the answer is no we are we have different roles, different tasks and but going to the first question well first the some structural reforms had been undertaken in the past few years in several countries in the Eurozone so the picture is not uniformly bleak but it's also true that of recent the pace has slowed down now two and let's say a word why this is so but just to give you an example of why they are so necessary one of the problems that has the Eurozone Europe in general is low productivity it's now quite established that the productivity the largest part of the gains in productivity are obtained by transfer of technology from the more efficient companies firms to the less efficient ones not so much by innovation at least in Europe also by innovation but mostly by transfer in order to allow this transfer to happen there must be a business environment an economic environment which is conducive to produce such a transfer and that's where the structural reforms come very useful to create this environment where this transfer could happen and therefore productivity could increase with corresponding increase in wages finally it's quite clear that once countries enter into a very important political and election cycle the push for legislating structural reforms becomes less so becomes less vigorous however by itself doesn't justify any absence of action even without legislation you have implementation of previously legislated reforms and frankly it's common assessment that in some countries there is a lot to do in terms of implementation even without thinking about new legislation that's why although knowing although aware that the political conditions are in there for legislating the ECB continues to renew the appeal the plea to undertake structural reforms Mr. Yanitya Mr. Draghi you listed a lot of factors that are important for your monetary policy decisions and I was wondering how important is the political uncertainty and risk for your accession for that I mean you mentioned that you don't do monetary policy on the outcome of election so I was wondering about that as a matter of fact yes we don't do monetary policy on the likely outcomes of elections but you see of course we ask ourselves how much does political uncertainty how political uncertainty can affect our monetary policy decisions of course we ask ourselves this question and the answer is to the extent and only to the extent that we don't react to political uncertainty by itself but we certainly internalize the information that comes from the fact that political uncertainty may affect our medium term outlook for price stability so to the extent that political uncertainty has this effect we internalize this information and together with lots of other information we are taking our monetary policy decisions Mr. Ewing Jack Ewing at New York Times Mr. Draghi I wanted to go back to the phrase you added about the risks are related to global factors I wonder if you could elaborate on what that means exactly what types of global factors is it the political risks that you just mentioned is it North Korea is it US tax policy and yes that's my question thank you well it's a broad category well first of all we have two sets of risks one is linked to global factors the other one is more domestic one interesting fact is that over the last over the past few months the balance between these two risks has slightly changed in a sense that domestic sources of risk have diminished and global geoglobal source of risk have increased and some of them are exactly the ones you exemplified a moment ago but others for example have to do with how the UK economy will be doing in the post-Brexit we always assume that in fact we shouldn't think that it's over of course the consequences especially the trade linkages are there we're there and are going to be a source of a channel of economic consequences coming from this of course the final outcome will depend on the shape that the final negotiation will have how long it will take but it's quite clear that even now this uncertainty about the length and the shape is producing economic consequences so that's another another another source but the other factors are really very much what you exemplified before and add to this also possible negative surprises in some emerging market economies that's also a source we shouldn't forget in 2016 early 2016 at the beginning of the year we had big worries if you remember about what was happening in China situation has improved since then but uncertainties remain Mr Lacour Mr Lacour now for the French news agency AFP my compliments Mr Draghi because all the political risk related questions you never mentioned France in the answer so let me try again you know in 10 days we have this between a candidate favorit in the polls pro-European, young ex-banker and Mr Le Pen pledging for leaving the Eurozone so I just want to ask how comfortable is the government council with this possible situation and if even it was assessed during the discussion the possible outcome of the vote and does that have a role in the overall assessment of the situation regarding the risks and maybe just a second question to understand you well on page 1 when the statement says that the downside risks are further diminished it just relies to the present situation of the recovery and then the risk tilted to the downside that is relied to the future so the outlook is this the difference between present and future because for me it's not really clear now the answer to the first question is in the sense I've answered before but let me summarize saying that in the government council meetings we discussed policies not politics and as far as the second point let's read it together since our meeting in early March confirms that the silk recovery of the euro economy is becoming increasingly solid so it's a process in evolution and that downside risks have further diminished so it takes stock about downside risks so far they have diminished and the silk recovery is becoming increasingly solid so it's an evolution that we see from survey data could continue so we have the final question Ms Weisbach please Governing council meeting sorry no no no well I have my own headline but what would be used from yesterday's and today's discussion from that meeting the second question sorry I need to go back to the sequencing element during the ECB watchers conference I had the impression that you were quite adamant about the sequencing issue that before any rate will move you and your asset purchase program today it sounds different perhaps not and if so perhaps you could elaborate and the headline first the headline really is the risk surrounding your growth outlook while moving towards a more balanced configuration are still tilted to the downside and relate predominantly to global factors that's the headline no the shorter you work it out on the second point I just wanted to re-read the speech of the ECB watchers conference so that has to make absolutely clear there is no difference on the sequence okay yeah that's what it says yeah that's what says and that's what the introductory statement says so thank you


Teacher Karlo, what is the latest on Assange hurt that he might get sent back to the US soon? Now, he might get sent to the US. It's not back to the US. As far as I know, Assange has never been to the US That's the whole absurdity of the whole thing. He's not a US citizen. He hasn't been to the US and basically these neo-cons that have committed tremendous amount of war crimes are reaching across the Atlantic and forcing a puppet regime in the UK to hand over a journalist for As a political prisoner to torture him further And yes, he's closer to being extradited to the United States Mission creep. Hey Chih-chou. I want to ask is investing Investigative journalism dead for fear of persecution. That is one of the reasons that they are persecuting Julian Assange Is it dead? No, not dead, but it has taken a brutal hit and The reason it has taken a brutal hit is because of all the all the other corporate propagandists some People who are still confused as to what a propagandist is and what a journalist is Still refer to these CNN BBC CBS Guardian Form all of the corporate propagandists in the Western world mainstream Okay Investigator journalism has taken a hit. Thanks in large part because of their compliance okay because They have been bought and paid for a thousand times over Some of the people that are in our society. We should hold the most accountable For the state of the world and where we are headed Okay, kid you not if this continues. We are headed down a very very dark path are these talking heads on cable TV or corporate propaganda sites that are streaming and These so-called writers which are again Stenographers of the centralized power who have brought the state of the world to the brink to the brink Once it's all said and done We need to hold them accountable for their crimes against the humanity my personal opinion


Flash memory is a type of non-volatile storage technology that is widely used today due to its ability to store data even when power is turned off. As the demand for larger memory capacities increases, flash memory has been scaled down to smaller and smaller dimensions in order to reduce costs and increase performance. One of the most promising technologies for scaling down is charge-trapping memory, CTM, which uses high-K dielectrics to improve performance. This paper reviews the current state of CTM research with high-K dielectrics, focusing on the application of high-K dielectrics as charge-trapping layers, blocking layers, and tunneling layers. This article was authored by Chun Zhao, Su Zhou Zhao, Stephen Taylor, and others.