Hi everyone, good morning, good afternoon, good evening. This is Michelle DePama, Principal Solutions Architect with the Data Services Office Hour. And today we have Daniel Parks is back, isn't that awesome? And he's here with Dylan Murray. And we are going to talk about, are we talking about just OADP? Are we talking about more, let's get into the overview of what today's show is going to be about. So who do I start with? Do I start with Dylan with an overview or is it Daniel?  So a little bit, the idea of what we can cover on the program is I was able to, let's say, gather questions from the field and also from customers that we're working with related to OADP, that there are some questions that come up now and then. They come up quite frequently. So we can maybe try and cover those and see if Dylan could give us an answer to those. And then I think that Dylan also has a really nice demo to finish off. So I think that that's more or less the plan. And Dylan, if you want to give us an introduction really of what is OADP? What is it based on? What was the idea behind it? Yeah, absolutely. So I'm Dylan Murray. I'm the Engineering Manager for OADP, which stands for OpenShift API for Data Protection. OADP was birthed out of some of the work that we were doing already to enable migration of applications across clusters. And as part of that work, we were really leveraging Valero, which is an open source disaster recovery tool for Kubernetes clusters. So what we wanted to do was take the work that we had done to get Valero working with OpenShift and kind of package it up in its own product. So OADP is a backup restore tool for OpenShift. It's capable of back up application workloads, persistent volume data, internal images. So yeah, OADP itself is really an API to enable customers, partners to take different backup use cases, different restore use cases and really get it integrated back into OpenShift itself. Awesome. Okay, so I'm going to start in with the questions. I actually have a few of mine already, but let me get through these a few questions first and then I may add in a few more. Okay, so the most asked question has been, is OADP part of OADF? And do we need to deploy OADF to use OADP? Can you give us an idea of the prerequisites needed to use OADP? Yeah, great question. So OADP is not a part of OADF. OADP is an operator that's installable in OpenShift. Where it kind of gets tied into OADF is to make your life easier. So, you know, as part of a backup or store strategy, you need some type of backup storage that's off the cluster. OADF, so this includes an object storage API. When you install OADF, you can use Nuva for this purpose. So Nuva will actually enable an S3 bucket where you can put your backup target. And then we also obviously support the backup or store of CSI snapshots, which I'm sure we'll talk about a little bit as well. And so when you install OADF, you get RookSeph, which allows you to take CSI snapshots and OADP will work natively with that. Okay, so that was part of the next question. Thank you for answering, like what are the different backup types available in OADP? So I think you covered all of them just now, correct? Not quite. So it's important to kind of distinguish, like when you take a backup, there's the Kubernetes resource data and then there's the persistent volume data. So all of your state where things get really kind of customizable and configurable with OADP is how do you want to take a backup of that persistent volume data? And your options are either limited or superfluous depending on what storage you're using. So the one that we just covered is CSI snapshots. So if you have a CSI compatible driver or your storage volumes, Valera allows you to take backups of those CSI volumes. So taking a native CSI snapshot, there is a limitation with that that I'm sure we're going to cover in a second, but we do support CSI. We also support cloud native snapshots. So if you're using EBS, Azure, Google, Valera was going to call natively into those cloud provider snapshot APIs. And then we can leverage that and restore as well. And then the third is if none of those work for you there's kind of like a generic brute force catchall solution and that's what's called Rustic. Rustic itself essentially performs a file system copy. So it's not the most performant out of the three, but it's kind of more flexible because it gives you a lot of different options so what you can support. So if you take a backup with Rustic, it'll actually take a file system copy of the volume and put it in your backup storage itself. Maybe a number of reasons why you want to choose one over the other. So I guess this may end the next question I think is about like CSI. One of the common questions we get a lot and questions or complaints depends on how you want to spin it. With OEDP and you want to take a backup of SEP volumes when you take a backup of a SEP CSI or take a CSI snapshot of SEP, the snapshot itself exists on the SEP cluster. So if your storage is essentially on your open chip cluster, your snapshot exists on that storage. It's not truly disaster recovery because if your cluster were to go away you'd lose the snapshot data. So in OEDP 1.0 we don't have what's called a data mover. You'll hear this commonly referred to across different backup vendors which is the capability to take a snapshot and make it portable and durable. For OEDP 1.1 we're trying to solve this. So expected like the July timeframe we're going to actually include a data mover with OEDP that can take CSI snapshots and replicate them off cluster. So into your object storage kind of like what Rustic does today. So there really when you have like this data mover feature what you're able to do really is do a snapshot. So really you just have to freeze the application if you want to do a consistent backup for just a small time and then the data mover can slowly move that data out from the snapshot out to wherever you want to send it if it's S3 or whatever, no? Exactly, yeah. So it's a nice asynchronous process in the background. Fantastic. Okay, so Daniel do you want to take on some more questions here? Yes, no, the other question as Dylan was saying that has been covered is the data mover as we have explained, no? That's the availability of being able to move the data outside of the cluster that there's a big worry that you have, no? And let's say that what follows up to these questions that we also got quite a lot of questions and a little bit of confusion is about crash consistent backups and application consistent backups, no? So let's say that if by default we take a snapshot of a running application we have a crash consistent backup, no? But to maintain let's say the data integrity, no? If for certain applications like databases we really need to freeze that file system or to freeze that database in a way that the snapshot that we're taking is actually let's say application consistent, no? And I wanted to ask you Dylan if we're working in or what does OEDP offer regarding this? Yeah, absolutely. So by default there's support for what's called hooks with OEDP and Valero and hooks allow you to kind of customize actions within containers prior to backup and post backup prior to restore and post restore. So really common example is a database if you need to run a file system freeze you can instantiate a hook for that database. So at backup time, right before the backup actually runs on that volume, we'll trigger the hook take the PV backup and then run a post hook that essentially could bring the file system out of a freeze. Now, you did mention like consistency backups versus application or crash consistent versus application consistency. We commonly get asked what's the easiest way to coordinate different actions that have to occur in different containers, right? Sometimes your application is not just a single database container it's coordination of events across different microservices. So you can obviously use really complex set of hooks to accomplish this today but our hope is in the future this is actually a commonly discussed problem in the option Kubernetes world. And so there's discussions in the data production working group on how to exactly solve this as a core API as opposed to kind of Frankensteining a solution around hooks at backup time. So we're obviously involved in these discussions and we know it's a need moving forward but as of today, there's kind of like a little bit of a solution with hooks there's definitely a gap missing between application consistency though. Yeah, the other question that I had there is what has happened to me when I have been working with OEDP and you get a certain application and then you say, okay I want to take a consistent application backup and then you go into the pre hooks and post hooks but then you really start looking like for an example for that certain application, that certain database are you working or is there a place where we can maybe link afterwards where we have examples or are you working on having examples of pre and post hooks not because it gets a little bit confusing at the beginning anyway when you start working with it. Yeah, that's a great question and obviously, I've seen other backup vendors they kind of ship with some included examples for most commonly used applications. We do have like a set of example applications that we try to use for demos for OEDP and some of these include hooks like we have a HA Postgres so that's a common commonly used application that requires some type of pre backup hook but we're hoping to kind of build out this suite of examples moving forward and make it as easy as possible for folks to consume custom hook actions beforehand but I think we need a little bit of work on that to make this. Great, that's great news because I have, as I know when you get started you suddenly think, okay, and now what should I put here in the pre and post hook part? So that's going to be really great. And the other thing that I also get asked quite a lot is and I think that is a good thing if we try to clear it up is a little bit like them. What's really OEDP focused on? So let's say we want to focus or is OEDP focused on taking backups of applications or really taking backups of the OCP OpenShift control plane? Because we get quite a lot of the question like can I use OEDP to backup HCD for example or can I take backups of my cluster operators? So if you can please give us a little bit of insight into that. Absolutely, yeah, that's a great question. I'm commonly asked this a lot too and you kind of hinted at this but I'll just reiterate to kind of make it clear. We try to divide the backup restore scenarios for OpenShift into two buckets. The control plane and then your application infrastructure, right? So when you're talking about backing up and restoring the control plane which has obviously changed a lot over the years of different OpenShift versions and OpenShift for your cluster infrastructure or part of the control plane is all managed by operators now. So you have a set of cluster operators and you have that CD essentially. And then your application workloads is you as an application developer, assist admin, you're knowledgeable about that application what it entails, what it requires. We're really focused on the application level for OEDP. So and more specifically like the namespace level. So we're trying to make it as easy as possible for you to specify a list of namespace or projects that you want backed up and then we'll do the heavy lifting to go and make sure that all the data that encapsulates those namespaces is backed up. Whether it's cluster scoped or namespace scoped we try to intelligently determine what that is. From the control plane side, OEDP is not focused on backing up any cluster operators. And the purpose of that the reason for that is that with operator based workloads there's only really a subset of that namespace that you wanna actually include in the backup. And we're not focused on trying to intelligently determine that ourselves. Not saying that it's impossible. So someone that's really knowledgeable about what OEDP is doing under the hood and what exactly they wanna backup out of these namespaces they could likely figure it out but it's not a focus that we have today. Great, great, great. Thanks for that. So I will take one more Michelle if you like and then you can continue because I have had this question for some time and I also have a little bit of doubts around this because as Dylan explained before no we have like the migration toolkit no that is really a cluster kind of migration that we work with and where OEDP got started. And then we have the idea of a cluster backup when we want to backup and restore an application from our cluster. But there's a little bit of confusion or at least I got certain questions regarding where are the boundaries? No, when should we use the migration toolkit and when should we use OEDP? And also really can we use for example OEDP to migrate let's say an application with its persistent volume to a different cluster? No, so there's a little bit of confusion or maybe if one product is stepping into the other one so if you can give us a little bit of leeway on that also, Dylan that would be great. Absolutely, that's a great question. I was actually just asked it this morning before this so yeah, in general what we try to delineate is if you are interested in taking an application workload on one cluster and moving to another cluster that falls under the domain of MTC. And even though they're both using Valero under the hood the reason why I say that is that MTC gives you a little more flexibility in terms of like moving across different storage providers. Like let's say cluster one is hosted on a completely separate cloud provider maybe it's got entirely different storage requirements and all that kind of stuff. MTC tries to abstract away cluster specific metadata about these application workloads and replicates them across. With OEDP we're more focused on same cluster workloads. So we want to kind of give you the tool set to allow you to take one cluster and ensure that it's backed up and safe and can be restored. Now with that said OEDP backups can obviously be used to restore to different clusters but you kind of have to know what you're doing you have to make sure that the persistent volume backups you've taken can actually be restored on a new cluster. So it takes a little bit more of introspection and intelligence to do so. And MTC tries to abstract that away and make it easier for you. It's obviously a little bit more bulky you've got to install the operative of clusters good through the UI but there's a purpose for that it's going to be a lot more options and flexibility. So in general with sum up if you're replicating workloads across clusters you're going to use MTC if you're trying to protect a single cluster and your applications that exist on the cluster we push it OEDP. There was one more question at least. So there was OEDP and the upstream community how much is Red Hat present in this community? Yeah, great question. I've been involved in the lower community for about three years now. We do have maintainers that actually participate we're actively involved in pushing forward the data mover design in the option of Valera world. So we're very invested in it. We have folks on our team that have been working in the Valera space for a long time now. So yeah, it's critical to what we're doing. We're trying to make sure that we are helping to push forward new features and bug fixes every new release. Oh, okay. So one more little question. So any new features coming out in OEDP we should know that? Yeah, so OEDP 11 the real, the big driver that we're focusing on is data mover. It's one of the largest requested features for OEDP. So we're trying to make sure that that is slowified. So in 11 that will be tech preview and it'll enable you to take any CSI snapshot and replicate it to your backup storage and then also restore volumes from the CSI snapshots that are in backup storage. Looking forward and OEDP 12 timeframe, one of the other largest requested things that we've done to ask, which we didn't bring up yet today, but it's multi-tenancy. So today with OEDP, we expect cluster administrators to install this and use it. But moving forward, we see application developers and application owners wanting to take backups of their own application without having access to everything else in the cluster. So this is something that needs to be done in upstream Valero. So we're kind of figuring out what exactly needs to change there and hoping to accomplish this in like the one-two timeframe, which is like the end of this year, maybe beginning next year. So yeah, those are two probably the most requested things that we get asked on the OEDP side. So I'll call that out. And then it's really just hardening the backup for store workflow today for something like file system backups. And obviously CSI is such a huge thing in the community today that we're really trying to make sure that that's a really solid experience. Yeah, I was going to ask you didn't about that and you just mentioned it. So like the kind of backup as a service experience that you could give to the developers or to the people using applications inside OpenShift and also providing some kind of RBAC. So there's also some control on who can run those backups, how many, kind of a quarter, something like that. No, as you said, something that is looking into the future anyway. Yeah, it's kind of a trade-off because the reason why it's so permission today, it gives you a lot of flexibility in terms of like taking file system backups. That gets, that probably gets a little bit trickier, the more constrained that the server is. But yeah, absolutely. It's like a huge need that you shouldn't have to be cluster admin to take backups of your own workloads, right? So we know it's a problem. We're definitely committed to fixing it. Awesome. Any more, do we have any more questions? I think we're, I think that was it. Do we have a demo? Yeah, yeah. So what I was hoping to kind of show today is I have an OpenShift cluster where I've installed ODF. So I've got SEP snapshots. I've got Nuba installed. And I kind of want to just walk through a backup restore scenario of an application. Sure. Do you want to share your screen? Yep, absolutely. I will just point out meanwhile that that Nuba is really what we call it. No, the downstream is like multi cloud gateway just in case that we, so it's an S3 object storage. Yes, thank you. Yeah. Okay. Oh, you know what? I'm going to try, I'm trying to, there we go. Let's do that. So hopefully everyone can see that. Okay. Go ahead. Let me know if I need to zoom in at all or if this looks good. So I just wanted to show in this cluster I have in my OpenShift storage name space. I've got RookSeph installed. I've got Nuba. And everything is kind of preconfigured here. So I went up to walk through all the installations on this demo, but just know I've got RookSeph CSI snapshots enabled. I've done the configuration of the volume of snapshot class to work with OADP. And then we've got an application, just a basic rocket chat application. So it's got state where you can see I've got some chat messages. I've already installed, you know, the name, Dylan's blockchain company. I've got some private groups. So what we'll go ahead and do first is just add some new data in here so that we can verify when we actually back up and restore the application workload that this data has persisted, right? So by 52 a.m. April 10, we should expect to go ahead and see this data when we go ahead and restore the application. So the first thing we obviously need to do is take a backup. So let's go to the command line here. And one of the nice things with Valero and OADP by exception is we have a nice CLI tool that I highly recommend to use for controlling the backup restore process. We ship it in OADP itself, so you can use like a long alias to get this out of the box or you can just download it to your laptop. So once you have this installed, we can go ahead and create a backup and specify the list of namespaces or, you know, labels, resources, anything that I want to define what's included in the backup. For me, I just want to go ahead and include everything that's in the rocket chat namespace. So let's go and look at that real quick before I do this. You can see we've got rocket chat deployment and rocket chat database. So we'll go ahead and create a backup, include the namespace rocket chat, and we'll call it ODF. Okay, so you can see that the backup was submitted successfully and we can go ahead and describe the backup to check out what it's doing. So you can see it is in progress. We have specified that we're going to include all resources that match my subset of namespaces. And then you can see this extra field that's called cluster-scoped auto. And what that's saying is that a backing up namespace rocket chat, but there's obviously some cluster-scoped resources that are associated with this application, right? An example is persistent volumes. In OpenShift, you may have SCCs. And so what we're trying to do is, you know, when we set auto, ODP and Valero is trying to intelligently go grab these cluster-scoped resources so that you can just very simply define namespaces. So that's kind of the most commonly granularized version of the application. So let's check it again. You can see the phase is completed and we should expect to see a CSI snapshot in the new space. So if we go ahead and move to the rocket chat namespace, you can see my PVCs are provisioned by CFRBD. And I do have a volume snapshot class that's associated with RBD right here. So in this namespace, I would expect now that the backup's completed to see a volume snapshot resource. You can see it was created just a minute ago. It's pointing to the PVC for the rocket chat database. And you can see that it's ready to use. Okay, I've been obviously in the background, this creates a volume snapshot content resource. You can see it, I've done a few backups here, but there was this one that was just created a minute ago. And they learned them. So what would be the metadata? So the actual, let's say, the definition of the objects goes into the multi-cloud gateway, into NUVAN, into S3. Correct. And what you get really is a pointer to the CSI snapshot and the information that you have in S3. That's exactly correct, yeah. So in S3, it's kind of today, only storing the metadata of the resources for CSI that are on the cluster. The next step with the date mover is that the actual volume data would be in that backup as well. So perhaps after this I can go and look into the NUVAN bucket. We can see that the backup, what the backup looks like and all that stuff. But for this, I'm just trying to keep it simple, focus on the user experience here. So let's just go ahead and pretend that some disaster struck, right? And let's go ahead and take its application down. So it's still running.  So once the project is down, this application will start returning a 503. There it is. You can see everything is still kind of terminating. And what we're going to want to do now is create a new restore from our backup and watch the application come back. Before we finish, the project's gone. All right, so our application is destroyed. And let's go ahead and create a new restore. Valero, create, restore. And all I have to do is just specify the name of the backup that I created. So actually, I guess before we do that, let's look at the backups in the ODP namespace. You can see I just made a new one here, ODF demo four minutes ago. If we go ahead and actually look at it, it kind of does the status, how many add-ins we backed up when it was completed and all that good stuff. All right, so we'll go ahead and create a restore. And we can go ahead and look at the restore itself to see how it's doing. It looks like it's already completed. So that was fast. If we go ahead and look at the rocket chat namespace that I'm in currently, you can see already. 20 seconds ago, everything came up. I'm going to go ahead and expect to see a volume snapshot that got recreated once the nature source was restored. Obviously, the volume snapshot content is still pointing to a snapshot handle that exists on the cluster. So because we didn't destroy the entire cluster, this CSI snapshot restore worked. We've talked about data removal extensively. The next step is to kind of make sure that data is preserved elsewhere as well. But once the application comes back up, which is the second as the database gets configured, we're going to go ahead and hope that we see that message on the April 18th in the rocket chat channel to just verify we got the latest data. And also just to point out, no, there was really the restore. The recovery was so fast, really, because we had a snapshot now in the same cluster. So that was almost instant, another recovery when you're working with a CSI snapshot in this way. That's exactly right. Yeah, that's the huge benefit of CSI and what we obviously want to push folks towards it. If you were to use something like Rustic, for example, which is the file system copy, it's going to have to go and restore that data from object storage, just like you do with like an R sync, right? So yeah, CSI is a huge benefit here. So I have a question. If you were going to fit the, like in the new feature data mover in that workflow, you just showed where would it go? So would it be it's after the backup, then you would take the mover to say, move the snapshot elsewhere, but the metadata stays in S3? Like how does that look? I'm going to test a question. We want to kind of give you the option. So the kind of the primary user experience that we see as being valuable is you just want to create a backup. And then if you've enabled data movement, the backup itself is going to go and do the data mover for you. So once the backup is complete, you should see your actual snapshot following human and object storage. We're developing as it's an API. So if you're not, if you don't want a backup of all the resources as well, you just want to start taking snapshots and replicate them to object storage that you can call the API directly. So you could do a backup with that data movement, run the data movement yourself, run the data mover restore, then restore the application, or it can just be part of that native backup restore workflow. So I create a backup with data mover enabled and I create a restore from a data mover snapshot. All that stuff should just happen in the background for you. Okay, thanks. So it looks like the application is back. I'm going to reload on the application. You can see here's my message from this morning to just prove that the state was preserved. Yeah, so that's the little basic CSI backup restore demo. If you want, we can go ahead and quickly just look. Excuse me. The credentials for Nuva here. Okay, and if we go ahead and look at the buckets. So you can see this is obviously something that I configured before we started the demo because I have this OEDP bucket and inside of the bucket you'll see a folder called Valero and backups. So for every backup that you take it'll kind of be under its own directory in here and it contains a few things that are interesting to call out here. I know it's not super visually appealing but the first is this tar file. So this tar file basically contains all of the resource metadata that exists in the cluster or I'm sorry, in the backup itself and not the volume snapshot data. So this is going to be your deployments, your PBCs, your services, your routes, all that kind of stuff. It essentially preserves the YAML representation of them in a big tar file so that we can recreate them at restore time. And if we go back you've also got a CSI snapshot JSON file so this is kind of just containing the metadata representations of those CSI snapshots so we know that at restore time where's the snapshot handle, what are we restoring from all that good stuff and then it just kind of gives you a couple extra metadata files for your convenience so all the logs that Valero server took with the backup, you can do them here and then it's also got just an entire tree representation of the resource list that you've got in your backup as well. Question, so anything special about this Nuba bucket? Was it a normal sort of? So it's got a few bucket policies that we had to set just to enable, for example if you want to like have image backups get pushed here, there's just a separate set of policies that have to be enabled but it's all documented for OEDP when you install it but for all intents and purposes yes this is just a normal Nuba bucket. Have one one quick question regarding like the life cycle of the CSI snapshots because it's true that we can have we're taking many backups and restores maybe that snapshot list gets very big, no, is there some control or how is the life cycle of the snapshot that maybe if we remove a backup then the snapshot gets removed, how does it work? That's a great question. So as of today the CSI snapshot feature in Valero excuse me so when you create a backup it's got a TTL so you can define essentially how long you want the backup to persist and when it gets cleaned up and then when Valero actually goes and restores this set of resources from these snapshots it'll go and clean up the superfluous volume snapshots and contents that it creates the CSI snapshot itself is all dependent on the volume snapshot class you're creating with so when you create a backup in Valero it has to go choose which volume snapshot class you want to use and what those configuration parameters are that's where you would define essentially the life cycle of these snapshots so for example if you look at my volume snapshot class in this cluster this is the one that I'm using I've had to set the retain the reclaim policy to retain that's because when I go and delete the namespace I want the snapshots to persist and this doesn't actually allow me to go and auto clean them up so I'm still responsible as the user to go and delete these things manually but my hope is that especially with data we're going to integrate into Valero since this will all be part of the native backup workflow we can just implement the Valero backups TTL with these snapshots as well so once Valero creates these things it doesn't actually go and monitor it with its backup life cycle but that's going to change with the one one data before great thank you and I just had one final thing that I think that we have spoken sometimes let's say that now, like the new worry that you may have is okay I'm taking backups I have backups of all my production or whatever a lot of responsibility is actually on my S3 storage because it's where I am actually storing all the metadata of my backup and restore application let's say I also get asked quite a bit on how do I backup the object storage in that sense what I normally also answer is that it really depends on where your object storage is and what kind of methods you have to backup and you have to think if you really need to backup and if you do what kind of options you have not like for example in AWS we have Glacier and they're not each vendor or each S3 object storage has his way of doing backups yeah that's a great point to call out I definitely agree with you that it depends obviously what this backing store looks like and where it's hosted one of the big benefits that I see of using Nuba is this is kind of one of its foundational problems it's trying to solve is replicating data across different pools so since this bucket is just your kind of gateway to where this data is being stored MCG Nuba allows you to kind of like abstract that problem away and be responsible for replicating data across into different safety zones and stuff like that right but in general folks are using like AWS S3 maybe they can configure their own S3 store with like Minio the responsibility is going to fall on wherever that thing is hosted and what other backup policies you may have already configured for that one but it's true that it's a great example for multi-cloud gateway and Nuba as you mentioned because it's really easy to set up now for your data buckets replication and you can replicate between on premise and on the cloud for example and have your data there so it's a great use case yeah it's like really why I find this to be the most cohesive representation of what OEDP is capable of is partnered with ODF you get a really great snapshot capability and then you've got a true solution for making your backup data itself durable and portable with MCG great thank you or should I know we next we're going to talk about the roadmap so hang on I have some okay so let me see I have some specific questions are the plans to have consistency group backups for applications that have their own replication where we need to run freezing snapshot at the same time are there plans for that there's actually an issue there's a GitHub issue here but I don't have the right stuff to cut and paste this into the chat maybe I'll do it later after we're done anyway did you get that question it was kind of a statement actually are there plans to have consistency group backups for applications that have their own replication where we need to there's absolutely plans we're trying to determine the best way to do it I think there's already work being done in the upstream working group to solve this we really like to leverage that if possible so okay all right Dan you want to do the next question statement you see there I think that in that sense more or less we have with the questions that we have done before I think that we have covered more or less all the questions that we have here in a broader way so I think that more or less we have been able to go through them and cover them fine so from my side I'm okay yeah so we okay awesome okay so there was one thing we didn't really talk about what about ISV backup restore products are you going to do any partnerships yeah so today we've got a couple partnerships that I think are worth calling out IBM Spectrum Protect plus uses OEDP as the ingredient to its backup solution Dell Power Protect is also one that's integrating this from the upstream community operator that we shipped a while ago for OEDP and yeah our goal with OEDP is really to allow I think game moves are a really good example of this is a lot of vendors have already developed their own data mover solution and they really want to be able to get tied into an existing backup restore API so our hope is that the work that we're doing is to enable data movement within OEDP is that backup vendors can kind of bring their own solution and just get integrated in the API itself so we're obviously kind of focused on that as a primary use case wonderful okay so I think Daniel you're right we kind of covered everything is there anything we haven't covered that you would like to cover Dylan do you think of anything just to you know I'll just kind of add to this like we're still trying to learn every single day like what are the needs for OEDP from users, customers so we're obviously more than open to feedback our hope is to make Valero a really really great open source tool for these types of use cases so we have a really big investment in that community we would love to bring open to specific use cases back up to the upstream community and get it fixed we have a plugin for open shifts so we're trying to make that really as robust as possible so yeah I'll just kind of I'll just say that we're really kind of trying to learn more get more desired use cases and fix them so we'd love to hear from anyone that's involved in this space what some help or has a feature request we would love to take it on awesome fantastic okay all right are we ready to wrap up Daniel anything else nope not from my side so I want to thank you both that was awesome and we'll be sure to have you back when some of the new features are rolled out maybe after tech preview we'll go through things again and thanks so much take care everyone thank you


Hi, I'm Zor. Welcome to a user education. Today we will talk about trigonometry, primarily about trigonometric identities. A couple of them, and simple actually, but still very necessary. I believe if you are basically trying to study mathematics in general and trigonometry in particular. Now, this particular lecture is part of the course called Mass Plus and Problems. This is the continuation of the course called Mass for Teens, and it's all presented on Unisor.com. All is completely free, and I even came up with some kind of a slogan recently. We don't sell knowledge, we share it. Okay, so, going back to trigonometry. What's interesting about trigonometry is, one of the interesting things, is its relationship to complex numbers. Remember how we defined trigonometric functions? Well, I would say main trigonometric functions, sine and cosine. We had some kind of a unit circle on the plane, and so the radius is equal to 1. Now, any point has basically an obsessive and ordinal. So, if this is angle phi, then this particular piece, which is obsessive, which is x, was cosine of phi, and y was sine of phi. Now, at the same time, complex numbers, which have real and imaginary part, where i is i squared is equal to minus 1, imaginary unit, is also represented as a point on the plane where a is obsessive and b is ordinate. So, there is some kind of a relationship. And this relationship is perfectly represented by Euler's formula, which is e to the power i phi is equal to cosine phi plus i sine phi. Now, this formula is very interesting in one particular aspect. We had no idea what is complex or imaginary in this particular case, exponent of number E. And basically this is a definition of the operation of raising into imaginary exponent. At the same time, it's a very convenient way to represent complex numbers to represent sine and cosine. And I'm going to use this formula to prove a very simple elementary trigonometric identity, which is a sine and cosine of a sum of two angles. I think the similar problem was presented in the main course, Math for Teens. But I would like to repeat it again, because it's very important to basically feel how complex numbers intimately related to trigonometric functions. So, using this Euler formula, I'm going to show, not to prove, but to show that sine of x plus y is equal to sine of x times cosine of y plus cosine of x times sine of y. And cosine of x plus y is equal to cosine x cosine y minus sine x sine y. So, why did I say that I'm going to show and not to prove? Well, because actually this is a definition and the way how we continued to define the exponent, in case exponent is a complex number, was actually trying to find out, what happens if I will do e times i phi plus psi, for example. And then I was using actually these formulas to prove that this makes sense and it's equal to times e i psi, which is basically the characteristic property of raising into some power. So, using this type of law or identities of cosine and sine, we have proven that this makes sense, which means it makes sense to define the raising into some complex power exactly in a similar way to this one. So, that's why when I'm trying to say that I would like to illustrate actually, that this is actually fine if I'm using Euler's formula as given. So, that's why I don't want to say it's proof because I would have some kind of a logical loop, but it's an illustration. Okay, if it's an illustration, so let's just do the following. Now, e to the power i x plus y, considering this is actually some kind of function which satisfies all the regular rules of raising into some power, it's equal to e i x plus plus i y is equal to e i x times e i y equals. And now I'm using the Euler's formula for this and for this. So, e to the power i x is cosine x plus i sine x and e to the power of i i i y is cosine y plus i sine y equals. Well, let's just multiply. Now, cosine times cosine. This is cosine x, cosine y. Now, then I will use this times this. Now, this is the sine times sine and i square. i square, as we know, i is an imaginary unit, so i square is minus one. That's why I put minus. Sines x, sine y. I put the rest, plus. Now, multiply this times this. It will be i times sine x cosine y plus. This times this would be i. I will put i around out of the parentheses. And that would be sine cosine x, cosine x and y, cosine x, sine y. So, what do we have here? On one time, on one hand, this is cosine x plus y plus i sine x plus y. Again, Euler's formula. If this is the exponent, then it goes here. This is Euler's formula. And then I use the properties of exponential manipulation and convert it into this. So, I have two complex numbers. Real part should be equal to real part. And imaginary part should be equal to imaginary part. And here is both formulas. Cosine of x plus y is this, which is this. And sine of x plus y is this, which is exactly this. So, again, it's not a proof, but it's a good illustration. And if you have forgotten something like this, if you forgot this formula, then perfectly valid to use this type of derivation, which is, again, it's illustration, not the proof. But it's a good way to, if you forgot something, to come up with this formula very easily. One, two, three, four, four lines of manipulation and you got it. Because the original definition of x plus y and sine of x plus y and cosine and how it's represented using sine and cosine of x and y separately, the geometric proof of these formulas is really a little bit cumbersome and you might not really remember it, which is fine. But this, you don't really have to remember much, except one and only one Euler's formula, which connects this, this to this, or this to this. So, Euler's formula is very important for trigonometry and it allows actually to come up with many other formulas relatively easily. So, that was my first problem with trigonometry data integers. Sine and cosine of sum of two angles. Okay, next. Next on my agenda is tangent and cotangent of sum. Okay, now this is actually easy and this is a plain manipulation with no facts. So, this is equal to, by definition of what is tangent. Tangent is sine divided by cosine. Obviously, in all those points where cosine is not equal to zero. Now, now I'm just using the formulas which I have derived just a second ago.  Okay, sorry. Oh yeah, that's correct, right. Okay, now how can I get from this back to tangent? I would like to use tangent for tangent. So, tangent of sum of two angles, I would like to express as tangent of some function of tangent of these two angles. Okay, how can I do it? Well, one of the things is let's divide everything by cosine x and cosine y. What happens? Both, numerator and denominator. Well, this denominator is easy because if you divide this by this, you will have one. If you will have this, divide by this, you will have sine x divided by cosine x, sine y divided by cosine. So, that would be basically a tangent x times tangent y, right? Sine divided by cosine and sine divided by cosine y. Now, in the numerator, let's just think about it. If I will divide this by this, cosine will cancel out. I will have sine divided by cosine of x. So, that's tangent x. Plus, if I divide this by this, my cosine will cancel out. And I will have sine y and cosine y. So, that will be tangent y. So, here is your formula. Tangent of sum of two angles is this. Simple, right? Alright, let's go further. Now, next is kind of a useful thing in case you have some kind of equation. If you have an equation, simple one, something like sine x plus 5 cosine y, no, x. Let's talk about equation. Equals, I don't know, 1, whatever. Doesn't really matter. It's not easy to come up with solution to this particular equation because this is sine and this is cosine. You cannot operate with two different things, basically. You would prefer to have something, one unit, one function, if you wish, of x. So, here is a very interesting property. There is something which is called tangent of half an angle. Apparently, any other trigonometric function can be represented as function of tangent of half an angle, represented in algebraic sense. And I would like to demonstrate it right now. Okay, so I will just represent sine and cosine, but basically in my notes, I have a little bit more detailed. I have tangent and cotangent of some angle also represented with tangent of half an angle. Because again, you can continue this particular complexity and put something else here. Tangent of x equals 1 or something like this. So, it's different things and with different things, it's difficult to operate. But if each one of these can be represented as an algebraic function of tangent of half an angle, which is true, which can be done, then you will basically have an equation of tangent of half an angle. So, you can resolve that particular equation. And then, since you know tangent of x divided by 2, you can find out x divided by 2 itself as arc tangent, for example, or something like this. So, it's very useful in solving some kind of a mixed equation where different trigonometric functions participate. And again, I will use only, I think for sine and cosine, the rest of the expression is in my notes for this lecture. And by the way, I didn't really say that every lecture on Unisor.com has video part and notes. Notes are like a textbook basically. So, I put something more and trivial things I will just use only for the notes and I will not present so they don't really waste much time on this. It's all analogous. So, what I will do is I will express sine and cosine in terms of tangent of half an angle. Here's how. Okay, let's start with the sine. Sine x. That's the beginning. I mean, obviously I can represent x as sum of two halves, which is equal to... Now, let's use the function sine of sum of two angles. So, it would be sine of x divided by two times cosine of x divided by two plus cosine times sine, so I can easily put it as two. Okay? Fine. Now, I'm going to convert it into tangents, right? So, I will divide it and multiply by cosine square. So, it would be two. If I will divide by cosine square, I will have sine divided by cosine, which is tangent of x divided by two times cosine square of x divided by two. Now, here's very important things. What is one plus tangent square of phi? It's one plus sine square of phi divided by cosine square of phi equals... Let's get to the common denominator. I will have cosine square of phi plus sine square of phi divided by cosine square by phi equals... Sine square plus cosine square is one. So, I have this. Which means that cosine square of phi is equal to one over one plus tangent square of phi. So, instead of this, I put this because of this. All right. This is it. We have expressed sine of x as a function of tangent of x divided by two. Now, why do we have to go through these whole operations to come up with such a relatively complex formula for a sine? For very simple reason, because the cosine I can also represent as a function of tangent of x over two. So, let me just put this function here. Two tangent x over two divided by one plus tangent square x divided by two. Now, let's talk about the cosine. Very similar. Cosine x is cosine of x over two plus x over two equals cosine x over two times cosine x over two, which is cosine square of x divided by two minus sine square of x divided by two. So, cosine times cosine minus sine times sine equals... Do exactly the same thing. Multiply and divide by cosine square. So, I will have cosine square of x over two times. If I will divide it, that would be one. And this would be sine square divided by cosine square, which is tangent square of x over two. And again, I will use instead of this, I will use one over one plus tangent. So, that's equal to one minus tangent square of x over two divided by one plus tangent square of x over two. As you see, we have expressed both sine and cosine. Okay? Now, similarly, you can express tangent of x in terms of tangent of x over two. And we have already, well, basically done that, because that's easy. We have already expressed tangent of sum of two angles in terms of tangent. Remember, we just did it in the previous. Tangent of x plus y was equal to tangent x plus tangent y divided by one minus tangent x times tangent y. Now, instead of x plus y, we will put x over two plus x over two. So, here we will have two tangent of x over two. And here we will have tangent square of x over two. So, here is another function. So, you see everything in terms of all trigonometric functions. The cotangent will be similar. So, all trigonometric functions can be expressed as functions of tangent over half of the angle. That's what's very important, because now some kind of a mixed equation, like I was just saying, something like sine x plus five cosine x minus tangent x equals to one. What do you do in this particular case? You express each one of them as functions of tangent over half an angle. And you will have equation where you can... Equation of one argument only, which is tangent of x over two. You solve it somehow. Maybe it's solvable, maybe it's not solvable, I don't know. That's besides the point. But if it is solvable, then you will have tangent of x over two, and then you will have the x. Okay, so basically these are some kind of trigonometric identities which I believe are very useful. And that's why I have decided to spend some time presenting them. All right, so I suggest you to read notes for this lecture. I might have missed something during my lecture. Notes are a little bit more detailed, and I don't usually skip any kind of calculations. I just put it as they're supposed to be. Other than that, well, that's basically it. I wish you luck and have a good time.


Millets are future food. Millets are healthy innovation. Millets are food sovereignty. Millets are both sustainable and an opportunity for their environment. Millets are super grains. Millets are small but have a big value with high potential for better production, better nutrition, a better environment and a better life.


What's going on everyone Sam here late in sports cards. We're doing a 12 box mixer for Eric W We've got 5 21 22 Puneany prism basketball choice 3 22 bowman chrome baseball hobby and 4 22 bowman chrome baseball HTA choice, so we'll start with Start with the bowman chrome hobby We'll go into choice after and we'll finish with prism choice Good luck Eric pull something pull some fire here pink Jackson Job to 199 First of Jason Shoria and Jonathan Mejia pull Steph Curry out of this bowman chrome. I'm gonna try I'm gonna try sniff There's a Kevin Smith rookie auto Not numbered for the A's Henry Davis Alex the Haces Jared Kalmick refractor of 499 Yeah, there's a Bobby Whitbrookie Got a daycare going on Bass good luck here. I'll see super out of this Purple Jose Ramirez nice to 250 for the Guardians Luis Meza Edison Paulino on the first auto there you go Eric. Congrats, buddy. Nice Paulina You're so our Garcia Jackson Joe Shimmer Jason Shoria on the first nice one there congrats Eric Not numbered on the shimmers last pack of Bowman Chrome a hobby box number one O'Neill cruise shades of greatness Christian Baccaro first and you're laying confidant All right, Bowman Chrome hobby number two Yes, what's up Eric just in time buddy Let's go need something big man Wander Franco refractor that's the variation right there nice congrats Eric Play over for Guerrero Zach V. Can I see the two waters? So far it's these two Eric Edison Paulino first which is pretty solid and a Kevin Smith rookie auto Two autos so far La Cruz, there's a Logan Serney first for the Phillies base on Royce Markins honor George Valera need a super. That's what we need super fracter Willman Diaz Harry Ford base shimmer Willman Diaz not numbered on the shimmer congrats there Eric The entry Rojas and Rose Rossman, Verdugo Little bit No shave November right now though. Once November comes Yeah, I know my lake everything grows up except right there Yep Yeah Forest is like clean money J rod Got Wilfred Varis White speckled to 299 first for the white socks West cat a canary yellow Adrian Sugesty nice 42 out of 75 There you go Eric gorgeous auto on that as well Nice one there. Thanks for the follow there Steve Steve fell asleep Steve Should be uploading to YouTube right now Invicta Victor Acosta Fell asleep Steve Jordan Walker Zeke yield Iran Yeah, once it uploads if it's not already uploaded. It'll be the first video or second video on Most recent YouTube. All right. Good luck here Eric. Let's do number three. That was nuts I know I'm the little I don't know why you ducked me in playing There was no ski ball. Mm-hmm. You look together. You didn't ask Lonnie play the 299 For the pirates. I told you to ask. I told you to ask Jake rocker first auto put me on the wall Jordan Lawler Jason Mingus. Yes. Yes, you are Steven W. Oh, yep Yeah, there was a Steven W. I as well in your Steven W. Oh, yeah Steelers. I would watch for sure Steve Yeah, Raphael Devers pink to 299 or magenta. I should say Yeah, I would go and watch that for sure Steve. Yeah, not not a bad break for you overall Watson the caro first coffee don't first 90s brawl Random discussion topic. We all agree the Buffalo Wildlings. Well, it's a little overrated. It's still decent Midwest quick trip Well, there that was kind of a empty like yeah, like we don't win there I've heard of quick trip. Yeah Kind of like a wah-wah to some degree. Yeah Purple Anthony Volpe nice to 250 Had Brit Perez Francisco Alvarez good hockey Really oh solid Simon Juan nice one there. There you go Eric first auto for the Mets. Hey, walla's fire Fires fire stuff all kinds of stuff They don't have wings though Steven Kwan. Yeah, they do not Absolutely Steve Definitely worth it shimmer Averson Artega William Bergola and beats. All right, Eric Let's do your four choice boxes now. I think there's gonna be something big in here. I really do Got a good feeling about this this four boxer Cheaper and bigger wings win-win then yeah, right there Can't complain about that. Yeah, you saw this up purple for the Mets that is Kevin Kendall 98 out of 250 nice one there We've got base auto Rossman Verdugo for the Padres, there you go Eric nice Padres it and a first base auto Greg Cullen going to the Orioles There you go Eric Not a bad first box a green looks like a patch auto in here as well Green Juan Guerrero 68 out of 99 Nice one there Eric good start like we've got a Nice gold patch auto rookie Louise heel for the Yanks that is game use memorabilia 38 out of 50 first one of these I've seen these are super hard to hit evidently nice heel JT Schwartz for the Mets On the base auto There we go Box Nice one coming up first here Eric we've got White sparkle Yonkiel Fernandez nice one there 24 out of 299 Congrats on that Nice Yonkiel Fernandez Should be white speckle on that as well get that into a mag for air We've got base auto It's gonna be What a box man Isaac De Leon Wow Wow wow wow yep, yeah, this is massive We've got for the Yankees Gold shimmer 18 out of 15 Roderick Arias Boom Whoo, baby, let's go Told you there was gonna be something nice in here Eric. Congrats, buddy. Let's go. That is massive card right there massive card Yes, sir Roderick Arias probably the number two chase in this product maybe number three Fine choreo and piquera. I would say last box of choice Eric speaking another good one here That was insane We've got refractor Dalen Lyle 42 out of 499 for the nationals Nice one there next up. We've got for the Braves Brando Mosquita and then we've got First of Logan's serene for the Phillies Nice one there Eric and that box with the Fernandez and the Arias and it was kind of wild actually Alright, let's do your five prism choice basketballs now Well, I see like a K Tiger strike no big deal Kid Nebula All right, good luck here Eric got been Sandy Anthony Edwards your exclusives John Collins Kobe white and Hakeem Elijah one Auto I have to soon move a out of eight Green scope nice one there Let's go dude Sensational signatures Kind of yeah, I don't know what that was that was strange Middle school right there. Yeah, I owe to soon Just getting out of middle school Gary Trent Jr. 10 out of 15. I stopped yelling dude. My voice keeps cracking Devon Booker 60 76 out of 88 nice one there as well solid first box there Nice. I oh uh How much are these prism? Let me take a look About 500 a box Steve 500 a box on these guarantee one auto three exclusives two silvers and usually two numbered cards or like exclusives so like a Nebula or Um Tiger strike Isaiah Stewart. There's a Kaminga silver. Nice one there. There you go, Eric Exclusives nice car number one Yanis Paul George Jalen Suggs Very strong box so far. Oh, let's go Evan Mobley Boom there we go Eric back-to-back massive autos right there Heck yeah, dude. Congrats There we go Eric First an IO to eight now a Mobley nice Mobley Gary Peyton 31 out of 88 and Deatre 8 and 11 out of 39 Personally, I would say prism choice. They're a little more expensive But thus like the resale market on them is better. You have more more odd like Possibilities with color. I like it more you get more cards Yeah, nice boxes so far for sure. It's been pretty solid the first two Hi your stripe Cam Johnson Exclusives TJ Warren Jordan Clarkson and Cade Cunningham. There we go. Let's go Eric Keep feasting on these prism choice boxes. That's nasty auto Ben Macklemore For the Trailblazers blue miles bridges 15 out of 39 and James Wiseman Tiger Stripe nice one there for the Warriors. There we go Eric Solid Tiger Stripe had to get you a Tiger Stripe for sure in five boxes Jared Allen, we've got Derek white Steph Curry nice and Nimesh Keita Auto we've got Chris D'Warze that'll work as well congrats Eric For really earn a three really good autos so far Spicy pee Pascal Siak. I'm 21 out of 39 and Joe Ingalls 21 out of 88 for the jazz and the Red Scope. All right, Eric Last box your break buddy See what we've got Jalen Noel cam Johnson Danny Green Joe Ingalls Scotty Lewis auto Julius Randall Not numbered on the Prism auto congrats on that We've got red Cory Kispert 27 out of 88 for the Wizards and then Clay Thompson 20 out of 88 going to the Warriors That'll do it for your break Eric. Thanks again as always for the support my man. We'll get those right out to you


For more videos and people's struggles, please subscribe to our YouTube channel. Thousands of migrants from Morocco and parts of sub-Saharan Africa who reached the Spanish enclave of Kyoto faced repression and was sent back on it to detention. Between May 17th to 18th, approximately 8,000 migrants managed to swim the roughly 200 meter distance to Kyoto located on the tip of North Africa bordering Morocco. The migrants were intercepted by Spanish security personnel patrolling the borders. Spanish security forces reportedly used excessive force metal batons, smoke bombs and tear gas against the migrants in Kyoto. Armoured vehicles were seen patrolling the beach to prevent migrants from going any further. At least 6,600 were sent back by May 21st, according to the Spanish government. Around 6,000 of those who had arrived were Moroccan nationals. 2,000 of the migrants were children. The migrants were held in the local football stadium before being sent back. The children were taken to industrial buildings and warehouses run by charity groups. They are being held without their families. This is part of a compulsory 10-day COVID-19 related quarantine period. Some of the children also reported that Spanish security forces physically assaulted them with metal batons and used racist language against them. The towns of Melilla and Kyoto are the two main Spanish territories which have long served as the first jobs for migrants and refugees trying to enter Europe. Local government sources stated that 86 migrants had crossed the border into Melilla or Tuesday. They also added that the larger group was blocked from entering by the Moroccan police on their side of the border. The number of people who managed to escape the security forces guarding the border areas was unclear. At least one migrant drowned in his attempt to swim across the Mediterranean Sea. On Thursday, the number of migrants trying to enter Spain decreased drastically due to reinforcing of the border by the Spanish authorities. The Moroccan police on their side of the border also set up barriers and prevented migrants from crossing. There have been reports that the migrants were used as a pawn in a diplomatic issue between Morocco and Spain. Recently, Brahim Ghali, leader of Western Sahara's Polisario Front, was admitted for medical treatment in Spain on humanitarian grounds. The Polisario Front has been in the forefront of resistance to Morocco's illegal occupation of Western Sahara. Morocco had expressed strong disapproval and anger at Spain's decision to permit Ghali to seek treatment. According to testimonies given by some of the children to international news agencies, Moroccan authorities actively encouraged people to cross the border from Monday following Spain's decision to admit Ghali. Many of the migrant children were reportedly locked up in prison in Morocco before being set free to cross the border.


Everybody forced here rip in 2021 contenders optic football hobby 10 box half case number 32 pick your team style Adam P Broncos Billy S. Lyons Callum Giants and Titans Chris H Eagles Danny C Bears Niners Don G. Bills Derwood Cardinals Seahawks Dylan F. Panthers Edgar B. Saints Washington in the Colts Francisco Vikings Gary. Oh with the Jets Harper has the Bengals Packers Chargers Bucks Jags Dolphins Ravens Chiefs Jake J. Raiders Kelly H. Rams Kenny H. Falcons Lance S. Cowboys Mike L. Steelers Nunzeo Texans Rory Patriots and Sina with the rounds Here we go. Good luck everybody. Got Tom Brady and Eli Mitchell base cards Cracked ice John Bates Rookie Ticket Auto Washington to 22 Go Washington Bills Greg Rousseau Rookie Ticket Auto Not numbered Season ticket blue Nick Chubb Browns to 99 and a lottery ticket Joe Burrow nice insert Censy start with that cracked ice Derek Henry Pat Frymouth rookie Rookie the year contenders auto to to Atwell Rams to 60 redemption Bears cracked ice Justin Fields RPS Boom Danny C with the Bears a big hit Cracked ice Fields That'll be nasty Red season ticket H. A. Brown To 175 Titans orange Tom Brady MVP contenders 17 of 50 bucks Base cards to font digs rookie Josh Palmer Broncos orange rookie ticket auto Patrick Sertan the second to 50 cowboy Simi Fajoco red rookie ticket RPS Also to 50 Jets rookie ticket orange is Elijah more to 50 and Trevor Lawrence MVP contenders 10 of 50 Jags Got Lamar Jackson base rookie ticket base Pat's from Andre Stevenson Niners rookie ticket auto Eli Mitchell Jets rookie ticket auto blue Elijah Vera Tucker to 99 orange for Washington Antonio Gibson to 50 and silver MVP contenders Matt Stafford Rams Got Jonathan Taylor Zach Wilson rookie for the Jets I don't think seven six is gonna be the final lane. I'll say that Jibril Cox rookie ticket auto Cowboys Browns rookie ticket auto RPS Anthony Schwartz Jets green Pulsar color match Corey Davis to 30 and an up-and-coming Justin Fields Bears rookie inserts Love the optic inserts Bears having a fantastic break after that cracked ice redemption earlier Jonathan Taylor Nico Collins What do you think Lane? No, but gray rookie ticket auto chiefs Titans Elijah Molden rookie ticket auto season ticket silver Ryan Tannehill Titans blue winning ticket chiefs Tyreek Hill Not to be the 99. Well, this is Jeter downs playing right now third That's why Jeter beat the Yankees Mark Andrews Jamar chase rookie ticket Bengals Colts Mike strong rookie ticket auto Bears Dazz Newsome rookie ticket auto Texans rookie ticket red Nico Collins to 175 And a Sunday Samuel jr. Nick Bolton Roll the die one two three top chargers four five six bottom chiefs Goal one chargers on this one. Come on. So more get these guys Here's a Tom Brady Travis etn jr Raiders rookie ticket auto Trayvon morrig Eagles teal the 75 rookie ticket RPS Kenneth gain well Lance rookie ticket red for the diners to 175 Exes and oh silver Cleal mag Justin Fields bears God say Kwan Kellan Mond Rookie the air contenders auto Seahawks Dwayne Eskridge to 99 Screech and 49ers rookie ticket RPS Trey Lance Great car Niners We go we will get that mag for sure Good break here blue Jonathan Taylor season ticket Colts color match at 99 And pink round numbers. This will be the 75 Elijah more Javante Williams one two three top four five six bottom Two top of the Jets Jets here. Yeah, no kidding Felix. No kidding. All right. Lamar Jackson. I'm on Ross St. Brown Demshin Ravens rookie ticket auto odafe away Ravens Saxons with the final auto is a Nico Collins on card rookie ticket RPS Patriots blue rookie ticket Mac Jones 34 of 99 there you go Pat's And I surround numbers here fields in Mac to 99 There's Pat's one two three top four five six bottom.  All right. Here comes your recap. I'll be a Nico Collins Ravens redemption odafe away Dwayne Eskridge Kenneth Gainwell Trayvon morrig Mike strong Dazz Newsome Elijah Mulden Noah Gray Anthony Schwartz Jabril Cox Eli Mitchell Elijah Veratucker Patrick Sartan the second Simee Pajoco tutu Atwell Greg Rousseau cracked ice John Bates a rookie ticket RPS of Trey Lance for the Niners and a cracked ice redemption for the Bears Justin Fields Big redemption there congrats Chicago That'll do it for contenders optic. We got more football coming up next