 Good afternoon. I promise I'll try to keep you awake. It's post-land session. So to keep you awake, I'm just going to code all that all along. So we're starting with this particular piece of code. It's a regular Java code. And essentially what it does is just to give you a brief overview. There is an authenticator. The first thing that the user does is logs in using the system login and password. And if that fails, user tries to log in using the Gmail login. And if that fails, then user is redirected back to the login page. The standard web workflow scenario that we have. In case if logging in using system login succeeds, what happens is user goes to the step two, which is a two-factor authentication. And then if that is successful, user is going to get transferred to dashboard. Is that enough? So if I just run this happy path, I'm just kind of configured to run the happy path. This code is going in system login inside two-factor. And then eventually it kind of goes to redirection, which is the dashboard target page. So let me just kind of give you a brief overview of the code which I have. This is a simple dispatcher, just doing a redirect. And this is the authenticator. Let's try to fail the system login. It should go to Gmail login and then go to two-factor. Fair enough? So that's the kind of overall workflow that I have here in case of system login failure. Let's see if Gmail login also fails. If system login and Gmail login both fail, you are redirected to the login page. Let's say Gmail login passes. What do we expect? We expect the user to see the dashboard. Fair enough? And in case if two-factor fails in now, we have to redirect back to the login page. So that's what this code is essentially doing. And we see this kind of code in our day-to-day life. User is just a normal Java beam, which we see all the time. So this is this bit of code here, which is there. And we write this code.