 Hello, just a quick announcement from the organizers, what they call the expert lounges take place in the lobby after this session and the lists are available there. Thanks. Okay, with that in the interest of time, I think we'll get started. So I'm sure you did it from the university and I'm up here with my colleagues Yuri and Menu. I also see Brian and Patrick here in the crowd and they're also really good at this kind of stuff. So if you have any questions, I think true do our best to support you. So I'm just going to give a bit of background on the process and then Yuri's going to give a bit of a demonstration on actually kind of installing these and configuring them. So I'm assuming at this point everyone knows what the standard based packages are. So I'm not going to get into the whole background of that. So but basically we have three types that you can set up and install or compare to your own configuration, right? So we have a dashboard based package. This has empty indicators and different types of I'm still using that word favorites. I know I shouldn't but saved items basically save visualizations maps charts tables that can be used on your own implementation. Then we have a full type of aggregate package. This includes the dashboards everything in the dashboard package, but also all the data collection tools, data elements, validation rules, all this other stuff that's associated with that. And then we have these full tracker packages that includes the tracker program and where possible we try to kind of link with the aggregate packages as much as possible. And these are supported up to the kind of three latest versions of DHS to. So if you're trying to do something kind of way back like on 232 233, you know, it might not have some of the latest features that have since been implemented. So I just wanted to talk quickly about some of the design principles associated with this and why, you know, there's some kind of interest intricacies associated with the installation. And there are some reasoning rationale behind that. So the first thing is that we wanted to do this with re usability in mind, right? So when you, if you think about kind of taking metadata out of one system and putting it into another, if you're kind of referencing hard coded things that are just unique to one particular system, it's going to be hard to reuse those in other systems. But the idea is that you can install this on another DHS to instance, and you know, with some configuration and work, it'll be able to also be utilized in your own system. So for dashboard only packages, we only use indicators, we do not use specific data elements, we do not do not use reporting rates for specific data sets. The reasoning behind that is, you know, you can populate the indicator with the data elements that match what's inside the package, you can use reporting rates from the data sets, that's from your own system, right? If you kind of hard code those in and you don't have the right reference in your own system, it's not going to work. And it's the same for some of this other stuff. We have this concept of category option group sets, you may or may not be familiar with that, but that is to kind of bring in the desegregation part. So let's say, you know, you have a less than five desegregation in the package, and this is split up into less than one and less than and one to four in your own system, then you can match that with the output. Okay. And we also only use relative periods and relative organization units. Once again, those are going to be unique to your own system, especially the org units. So you know, by using these relative items, you can just match them to whatever reference you need to in your own system. And there's a document described on these design principles. I have a link to them here in the description. Each of the packages also have what we refer to as a design document. And that explains the kind of basic design decisions that were taken or, you know, made into consideration when that package was made. Okay. And we have ones for the aggregate packages for the tracker packages. And you'll see a number of those within the link there. And basically, we describe, for example, why we use desegregations in a certain way, you know, how predictors were configured and how you can utilize them in your own system and practice certain program rules and what they validate within a tracker program, various program indicators, and why they're used in a specific way. So we try to explain as much as we can related to the design of that, just so you can get an overview of this. And that's actually, you know, not necessarily meant for technical audiences. You know, you could read through this and kind of get a better idea of what's contained within the package. What are the indicators that are contained? What are some of these validations that's performed? You know, what are the dashboards that we see? And what are some of the outputs that we can review? And, you know, that's a very good kind of piece of guidance that you can review if you don't want to kind of get into the details of checking, you know, what we're going to cover today basically in terms of the installation. So I'm going to just describe some of the main steps associated with installing package, and then Yuri is going to demonstrate this. And I just wanted to highlight a couple things. So this last part here, part five, that's what I would say is kind of the most important part, I think for many implementations in terms of configuring and are modifying the package, that really is what makes it work in your own system. Without that last step, you're just installing something and whether or not it gets utilized, you know, that's kind of, you know, up for debate, right? But by making it work within your own implementation, you know, that's where you can really share this with other users and have it work in the way you want it. And as an aside, if you're not importing the package, I think this could still be very useful for you. Some of the steps are a little bit different. Okay, you probably wouldn't download the package, but you'd still perform some of the things that we're going to talk about. Let's say you're just wanting to make manual changes to your system after using the package as a reference. Many of these steps would still apply, you would still want to make similar types of configuration changes to your own system when you match it to what's in one of these actual standard face packages. All right, so the first step is to download the package, right? So we have a download page and there's all kinds of packages there. And you just have to kind of select, well, which one do you want to use? And then you go ahead and download it. For each of these packages, there is an installation guide that's highlighted in red on the slide here. And I would recommend reviewing that first because we often get this feedback, I can't install this, this isn't working. We subsequently ask, have you read the documentation? And that becomes a challenge for us when we get a lot of those requests without people having looked through that. So we try to identify some of the quirks because each package has a little bit of differences here and there when it gets installed. And, you know, based on the ones that we've been able to identify at least, we try to identify those before it happens. Of course, other things can go wrong. And we completely understand that and we're happy to support. But it's a good idea to have a look at that installation guide before you actually try to install this. And make sure that you also select the right file for the version of DHIS2 that you're utilizing. If there is a mismatch, maybe there's a change in the API or a change in the metadata structure, something like this. And when you go to import it, it won't really work the way you intended it to. The second thing I would say to do is map this with your own system. So actually go through an exercise where you figure out what's in the package and what's in your own system. So here's an example of a template. And you can get a lot of this out of the actual metadata files. Basically, you know, in this case, we have the indicators. This is a dashboard package for the immunization. We have the indicator names, the IDs. And then we just go through this whole process of identifying, well, which indicators do I already have in my system? Which indicators am I missing in my system? This will allow you to both modify the file, which you will go over. This will also allow you to see, well, what am I missing? Because from a programmatic point of view, there might be pieces of information that you might not be able to generate because you don't have the underlying data elements, or maybe you are able to generate, but you just don't have a kind of equivalent indicator within your system. Okay, so it's important to kind of go through this process. And I would say definitely involve the program as much as possible as you can in this, right? This is not meant to be a technical component. This is really meant to be sitting down with the program, going over their data requirements, and then understanding, you know, what it is that they need. And, you know, from this process, you could then modify it and add new things. But getting a baseline of where you are is kind of important. And this also really helps just modify the package before you install it. So once you've gone through that exercise, you would then prepare the metadata file. And that's why, you know, I kind of think that's quite an important exercise. Because when you have that mapping, preparing the file becomes a lot easier, because you would have kind of selected all the existing IDs in your system. And I do want to emphasize to the extent possible, you know, sometimes these packages can introduce things like duplicates and things like that. So to the extent possible, you want to go through your system, and you want to make sure you're not kind of creating more of a mess by bringing this in and then having to rationalize those later on, especially if those have data later on, you know, you have two duplicates or maybe triple kits of something, and it has data, it becomes very difficult to rationalize. So we don't want to introduce anything kind of chaotic or heavy in the system. And by doing some of this mapping stuff, hopefully we can avoid that. And then, you know, there's some significant kind of things to look at when you're preparing that file. We've outlined some of them here. I won't go over all of them. But as an example, you know, the default data dimension, if you're in an older version of DHIS, you know, you might have a different ID in particular than what's produced from the package. You know, we have, we've been hearing from some of our colleagues about implementations that are 10 years old, you know, eight years old. And in those scenarios, you do have a bit more to consider than if you're in a newer implementation, for example. Okay, then you would want to bring the file into DHIS too. And I do admit there are some challenges still with the metadata import within DHIS too, through the user interface. But that doesn't mean it doesn't work. It does work sometimes. Okay, and there are definitely good practices to follow when trying to make sure this works. There are also alternative tools, of course, to bring this in if you're finding that, you know, you're not able to do this first. And I would always recommend, you know, I have this in capitals, do this in a development system. Okay, because you could find after you import it maybe something you missed in the mapping, maybe you've introduced a number of new category options, or maybe you've introduced, you know, some existing metadata, and now you made duplicates of that metadata. So always do this in a development environment. That way, if anything goes wrong, you can just reset it, you can start over, try it again, after you've made some changes, and see if it goes right. We have seen some instances where, you know, they do this directly in their production system, and that, you know, makes things challenging to fix later on. Also start with a dry run if you can, because that'll give you some information on if there are any types of kind of basic import conflicts, if anything's wrong in the system. Okay, if there are some conflicts, we've listed some steps, you know, for duplicate names and things like that. You can rename the name of the objects inside the instance. This is kind of part of this post configuration. To some extent, you can rename the objects in the JSON file, where you will cover the JSON file, or you can modify the JSON file. Once again, Yuri will talk about that more. Okay, this is kind of the biggest step that I mentioned, I think, in a lot of cases. Yes, it's one thing to actually bring this metadata package into your system. But once that is done, you really need to configure it so it works for your program needs. Okay, so there are a number of different things you can do. There are some basic things that basically every package needs. These are things like assigning the datasets or programs to the right organization units, adding your users to the appropriate user groups to make sure they have the right level of access, sharing, making sure all the sharing of the data elements, the program stages, the datasets, all of that is correct, especially now with our two levels of sharing for metadata and data, and configuring indicators for the dashboard package. So at its most basic, you always have these steps to follow through with. There's some kind of steps we talk about in terms of indicator mapping for dashboard packages. This is in particular quite important. If you bring in the complete one, it will come with the dashboard as well. But you have to make sure those indicators aren't going to work out of the box. So you have to map them to the indicators that are located on the dashboard so you actually see an output. If you don't do that, you might see the dashboard itself, but all your items will just be blank. And you can do this actually outside of DHIs too, for example, in a CSV file or something like this if it's easier, rather than doing it one by one through the user interface. Okay, user groups and sharing settings. So most packages come with three user groups, an access user group, admin user group, and a data capture user group. The permissions associated with each user group are listed there. But then this is important to make sure people can see the right pieces of whatever it is you're trying to look at. I mean, you have to make sure that if you're in a tracker program, for example, your tracked entity instance or your tracked entity type is shared correctly. The program is shared correctly. The program stages are shared correctly. All that other fun stuff just to make sure people can access the right kind of components of the package after you use it. Okay. And there are some tools to help with the sharing as well after the fact that are available that we can also, I'll make sure to add those links to the presentation. I know it's sometimes difficult to manage in large implementations, so the sharing concept. Okay, and then this last one, performing specific modifications. Now, this is just one slide, but this is often the most kind of difficult, challenging, time consuming part of this, right? Where you're working then with the program to find out, you know, I mean, you probably would have done this at some point in the beginning, right? We're identifying your requirements, you're talking with the program, and you're getting a better sense of what it is that they need to do. Because especially for aggregate packages, you know, there's probably a lot of this dashboard installation on top of what they already have. So there'll be a significant process of mapping what they have already seeing if there are any additional visualizations that they want to add to those. And for tracker packages, you know, they might only use it as a reference, or if they bring it in, there's probably a whole significant amount of additions of option sets, program rules, and things of that nature that are really needed to make this work in practice. Okay, so one thing I want to emphasize before Yuri goes into his demo is just a bit of a cautionary statement. So this is not necessarily plug and play. And we've had some challenges around that I think, you know, the team has made it much smoother for sure. And we're kind of slowly evolving. But it's not something you can just take and do, right? So every all those different steps that I listed, regardless of where you are in the process, I think it's worthwhile going through them, and just, you know, testing things first on a development space, making sure everything works, you know, and giving it kind of the proper time and attention it needs. You could end up with things like things that are named the same way, there could be creating duplicates, you could also have historical data if you bring in a complete package now, what do you do with your old reporting rates, and your old data in your old data set if you want to see linear trends over the last 10 years or something like this. So there's some effect on the user, well, can be quite a significant impact on the user as well, especially if they want to review their data over longer periods of time. So just a consideration, but with that said, I'm going to hand it over to Yuri, and he's going to walk you through some of the steps that I shared. Better now? Okay, then you missed the least important part. So I'm going to start with visualizing what Shorajit was presenting to you, and we're going to take a package that we have published, and then I'm going to go through the steps of how to import it, and we're going to use the most generic, the standard ways to do it, and then we'll have some errors on the way, and hopefully we'll be able to correct them. So a metadata package, Shorajit pointed out that we have these packages on our page, and we are going to look at the one of the recent ones, the COVID vaccine packages. So it's a combination of two programs. It's a tracker and an aggregate package in one, and I've just downloaded this package from our page, and there's one thing when you import a package into a blank DHS2 instance. Normally it's all fine and easy, and then you can start playing with it, testing it. But what happens if you have a system in place where you have other programs, and this exercise will show us this. So I'm going to give you an example of a DHS2 instance, and just to show you that we have several programs here already, and as we developed the packages together with Manu and Brian and other colleagues, we try to reuse some metadata. We have a package with generic core attributes, generic metadata library, that we can reuse in different packages, and sometimes that can be challenging in how you bring this, merge this into one place. So let's see. I'm also going to show you how to do this using a standard app, which some of you might be using. Some of you might be using other ways to import metadata. I'm going to show you how to do it using import and export app. So in order to import or install metadata, you need a proper login that would allow you access to metadata. You don't necessarily need access to data, but you have to be able to import metadata, and we'll go to the metadata import and start by uploading a file, and this is a file that I've prepared here for the annual conference, and it's a JSON file, and I'm going to use a debug method, and I will start as George suggested with a dry run, and first see what happens. Okay, they giggle. So here I can get the live feedback on what's happening, and it basically lists all the metadata that the DHS2 is trying to import, and at this stage I get an error message from the dry run that some of the objects have not or are not able to be imported flawlessly, and if I scroll down the page, and these are all the types of metadata objects, so you can see the options, the data sets, the program indicators, users and so on and so forth, and then in the end I get the messages. So these are the maybe most common messages that we get, we will get during the when the import fails, and then we can look at ways how to correct that. So the first one, it's not really technical, but it's a bit piddly in a way, so the first message that I get here is that it's complaining that property short name with value date of birth on this track density attribute already exists in the system, and this is a common error. So you might have a attract entity attribute date of birth in your system that you've been using for years, and now we come with a generic package where we standardized the UIDs, the attributes, and it would have a different UID, and don't be misguided, this is the UID, and I just called it it's just a coincidence, also 2022. So what do I do then? I don't want to have an instance with two identical attract entity attributes, because there will be a lot of unnecessary data in the end, so I will have two ways to resolve this problem. I can either take the UID from the JSON file from the package and update the UID in the instance that I have, or vice versa, I can keep the UID that I have and update one in the JSON file. Normally here I would ask Manu now to run an SQL command and replace the UID, but it will take so much time, so we'll go for the easier solution. We will replace the UID in the JSON file so that the package would install and will keep the UID of what we have in the system. So I'm going to take this new UID, but I will first search for this one. So I will use a program called Visual Studio Code, and I'll open my package, this is the file that I was trying to import, and I will just do a search on this UID, and I see that it appears in the metadata JSON file 16 times, so it's not only that attribute, but it's all these tiny dependencies. The date of birth is used in program indicators and calculating different things, so I would have to make sure that I replace it everywhere. So I will not rely on my spelling, I will just copy this UID here, and I will do a mess replacement. So I can just scroll down to see where, you can see here it's in the expression to calculate probably the age of the patient, so I'm going to replace it everywhere and click save. So then I'm going to look at the other issue that I have. I see that there's the other one, the code, it's related to the same track density attribute. So why do I get two messages? Because on track density attributes we have the short name and code in these two attributes. They are the same, but we cannot have duplicate metadata in the instance, therefore I have either to replace the short name and code, but then it will create two objects or I replace the UID. And the second, the third error that I have here, it's complaining about a predictor. So it says there's an invalid reference, and then it has something like this here. Now this is what we call a placeholder, and because when we create predictors, sometimes you need to specify the org unit levels in the instance, and then when this metadata gets exported, we do not want you to have the UIDs of organization unit levels that we use in our dev instance, because you cannot utilize them, so you have your own. And therefore, these are replaced by a placeholder like that. And to modify it in the JSON file, what you will need to do is you would have to do a quick API check for organization unit levels, and it says, okay, here I have my facility, UID is this, so I can just, I'm getting dizzy looking here, right. So I will go back to my metadata JSON file, and I will search for, okay, here it is. So you can see this, my predictor having the placeholder for OU level, and I'm just replacing it with the UID from the target instance. There are other placeholders that we agreed on when we were exporting the metadata, or when we create these packages. Sometimes we'll have specific organization unit groups following the package, so they will have a placeholder. Sometimes we need to have a reference to what we call a root organization unit, so level one in your system. So all that you will see, and as Shorajit also mentioned, you will find all these steps in the installation guides that we have, we've published. So as we perform testing on our packages, we add all that information, summarize it in the installation guides. So now I have covered the basic, well the error messages that I've received here. So let me try to now re-import the same file and see what happens. Fingers crossed. So and I'm going to go for a dry run again. Okay, so and now it doesn't complain, it says it's completed, so I can try to rerun it with a proper import. So okay, so the import of the metadata succeeded, and I get a 357 metadata objects that were created, and then the 34 that updated. So these are the ones often that need special attention after the import, because we don't know what happens when these get updated. And the second part of this presentation is show how we troubleshoot that and how we check that before. So normally it would stand in the installation guide, but let me show you the most obvious ones. So first thing I need to do of course is that I will have to make sure that my user that I logged in with has the access to the metadata. So because it's okay to import the metadata the first time, but then if I want to update or do changes to it or access it, I might not have access to it, and therefore I need to check that I have it. So it's easy when of course when you have a super user authority, but it's not often enough. So I see that I have now four new user groups that appeared here, and the highlighting is not so clear, but you can see it. So just to make it easy now, I will just assign all these or I will add myself to all these four user groups and save. So now I will have access to the program. And when I go to the program again, I will have to I can see that it's here, the COVID-19 vaccination registry. I will check the access and well for now I will just assign it to one org unit just for the demo purposes to make sure that I can register cases here and make sure that also the same user groups that I mentioned or that I added with the package, they applied to the appropriate program stages. So and I click save. One thing that you should always check before importing the package is the tracked entity type. And normally when you have a tracked entity type person, you would have certain attributes associated with it. So certain attributes that are set up to be searched for and now as you can see when I imported the package, this field is blank. So they've got overwritten by a blank place also. How to resolve it? Before importing the package, check the settings of your tracked entity type and do the adjustments either in the JSON file or in the instance after the import to make sure that let's say my first name or the, for example, first name or given name and family name that they are selected. Another thing that you need to check is the sharing settings for this tracked entity type person. So they might have been overwritten by what I have imported now. So here I don't have to worry because the public access is enabled. But just to make sure this is very common for a common error or issue when you import metadata. So now we should be ideally able to start using Tracker to register our case. But there's one more error. I know I've practiced it 10 times. So as I'm trying to register my case in the COVID vaccination registry and I'm using Tracker Capture for that and then the in the newer versions of DHS2, you'll be able to use both Tracker Capture and Capture. As I register my case, I will see that, well, funnily enough, their error is gone because probably we were lucky. No, as you can see, the order of the attributes in the option sex has changed. So normally it would start with female, male, and unknown. But because in my file that I imported, the order was different, which I altered. You can see the sort order like that. So you would have to check the sort order of options before using the package. And it's okay if it's just changed. But sometimes what may happen is that you'll get options that will have the same sort order, like one. And this is what we didn't see here. But if that happens, then you would not see a certain option and then it will be problematic to register the cases. So make sure that the options are sorted the way you want to and not altered. So I think that this is it from the perspective of setting up the easy guide of how to resolve these issues. There might be other problems that sometimes can occur when you have a database which has been maintaining for years and upgrading slowly. But surely because sometimes it may happen that your existing metadata will have identical or duplicate translations for the same properties and then imports will fail and you will be notified about that. Some errors you will probably will be not so easy to trace back like we saw the feedback in the import app. Sometimes the messages they're not so clear and then you need more tools to be able to solve these. For example you would have duplicates in the category options that were created over time. It would not be possible to create it now with the import because the import would not allow that. But for those legacy systems it might be possible. But in this case we are there to support you. In this case we are there's community of practice where this has been maybe mentioned and I think that again our installation guides and I can show you where it is. So we have the page on the docs dhs2.org and this is where the links from the package downloads go for each of the programs that we have. And here I have the COVID electronic immunization registry. We have the design, we have the installation and as the versions as we produce newer versions of the packages we also version the installation guide so with the updates. So because sometimes I don't know if you're doing this or if you might need to do this but when an update to a package comes out you might want to re-import the same package twice. And this is where you will follow pretty much the same steps but please read the installation guides first. So I think this is it from me and thank you very much. Time for questions. I'll pass it over to you. Yep so we have a little bit of time for questions. If there are any questions from the audience. I know we had a couple in the Zoom chat as well but I'm happy to take any questions if there are any or any clarifications. Yeah you can use maybe Grant can you give him one so he can answer. So that people on Zoom can hear. Hello we've had a lot of issues. I see there's program stages in the package where the sharing on the program stages hasn't come through after the import. Have you guys seen that when you've been installing these packages or is that just something that hasn't come up for you guys? So your question is you're importing the package but then you don't have access to certain program stages? So when we when we view the program stage in maintenance after the import all the sharing settings on the program stage have disappeared. Okay so I mean it is very difficult to see like what exactly the use case was but what I can say is that normally when you share program stages I know programs that we have in our portfolio where different user groups have access to different program stages. Let's say you have lab people have access to the lab but they don't have access to other stuff and we are talking about tracker here. So these I don't know if I mentioned I don't remember if I mentioned the during setup but it normally would be good to double check that directly in the program. So let's say I would open the the callback is easy had just one program stage but let's say for TB you'd have four program stages here and then when you check access so it would always be important to make sure that the proper user groups are added here as well as in the program itself. Do you think that covers what? We had a question online from Zoom. They were asking what happens when your dry run works but when you go to import it doesn't work. Are there any kind of strategies around working around that? I think in many cases this is the more advanced troubleshooting that has to happen then right Manu? Do you want to cover the the back end error? Well so basically it happens often you know and sometimes the worst part is that you don't get these errors you know on the screen right so you need to go to your logs you need to have access to the back end and then you know it's yeah it's some of these errors are coming from like Yuri mentioned you know some upgrades that we have been doing to the instances and as you know these upgrades they run some queries on the database and some of those queries they fail so you have a join that will duplicate defaults you know category options or whatnot so when you try to import the same thing you get basically this classic error maybe I'm getting too into too much technical details but you get this constraint key violation that probably some of you have already seen and in that case the only thing you can do is basically you know to go to the database find these duplicates which already exist you know and delete them there so it's a bit tricky you need to have a good knowledge of SQL of the database and you need to have access to the database that sometimes it's not the case you know so we also have another error that I think we didn't cover I don't want to go into a lot of details but it's a related to the sort order so what is that about it's like you get the options with the wrong sort order or something so when you import them again you might get another SQL error which is try to find it here I don't remember I will post it in the community of practice ah yeah I see here you had something like no pointed exception blah blah option set object with some yeah something more there but basically you know all these errors are ready to SQL and you need to be able to to run SQL queries you know on the database you know that's how I can summarize it they are not really easy to fix you know and there's not much we can do at this point yeah it's easy to see an option set with three options but if you have 10,000 or more and then there's in the number that would be one uh number missing that's when you would get yeah this error but you will also see that because uh the tracker won't start uh if you have it I also want to mention I think it's important uh well we have a repository in github where it's called the HS2Udils and large and yet they have been working on a script to fix the the sort order you can run on the database so this is already available it's for everyone to use and also Jason was mentioning they have a data integrity tool as well that you can run in your database to have you find these duplicates and do some cleanup so hopefully next time you import a package everything will work much better yeah no it's one that they have been developing uh outside HS2 because as you know if you run data integrity well the system is likely to crash you know we have seen problems in the past you know so they have a different one um it's another repository yeah but you also have the details to utils I'm not sure if this is a public repository actually yeah I don't know if we made it private at some point but yeah so so semi-related to this is just uh we've created a new documentation on metadata integrity and quality it goes through a number of these kind of both manual checks but we've also developed a the tool using our markdown basically that allows you to run a number of checks on you know kind of the integrity of your database a bit more than what the data integrity check currently does because it's using SQL it's a bit faster anyone who's used that data integrity check knows that it can be a bit slow or it might not work at all but using this you can get some interesting results and try to resolve you know before you import the package maybe or if you're doing it on a dev system and you encounter some of the errors that Manu has mentioned it might be useful to use something like this and and as he mentioned can download this off github free to use free to download and set this up and run it on your own system and it can give you some of this feedback that can hopefully help you to fix some of the issues that you're seeing yeah so Austin just made a comment that the that the data integrity check should be significantly improved in the next version 238 or the current version I guess whatever it is 238 version of DHS too okay if there are no more questions if there are further questions we're happy to stick around but we'll give you a little break there's the expert lounges after this as Yuri mentioned if you go outside um you'll be able to find all the details for the very expert lounge sessions that are available um so feel feel free to just kind of wander around and go to the lounge that you want and hopefully we can help you a bit more with some of your questions if there's any more questions about this stuff you know we'll be around feel free to grab us and and there's also Brian Patrick and some others who can help you with this stuff thank you very much