Jump to content

Help Wanted! - Pokémon DS Save Structures


codemonkey85

Recommended Posts

Yeah, I figured you knew what you were doing. Just thought I'd ask the obvious question (I'm good at that I guess?).

Oh right.

I guess the next thing I would try is capturing Starly and seeing if bit 1 in what you expect to be Starly's flag (0x15DD I guess) changes like it's supposed to. But that is pretty odd.

0x15DC, actually. You have to add the dex number and subtract 1, since the first byte (0x1451) is presumably Bulbasaur's data.

That's the next step for now.

Link to comment
Share on other sites

  • Replies 94
  • Created
  • Last Reply

Top Posters In This Topic

I really can't win, can I? By the way, this is what takes me longest as far as programming goes; making dumb mistakes and going back later to fix them.

Right now I'm trying to find the easiest way to transfer the Trainer Card signature data block into a neat multidimensional array I can use to set pixels on a bitmap. Pain!

EDIT: Please see the update to PKMDS Checksum Fixer... I threw in a Trainer Card signature viewer / copier. I'll be adding features to paste or draw a new signature as well.

EDIT 2: GTS Info?

Hey guys, I just saw something that looked interesting:

Original URL: http://z12.invisionfree.com/Pokexperto/index.php?showtopic=663

Rough translation:

"NEW! Guide Through Hex Editor to fix the WFC-ID (accounts of the GTS)

This question was born guide:

QUOTE (Leopoldo-Sensei @ Dec 22 2007, 03:54 PM)

Well, I realized long ago that I did experiments with Missigno of McNasty, but I do not know why I went into the GTS. Then I said: "I do the trick and the bane point" since it did not let me out. When I looked back to the menu and left me there was nothing inside, but when trying to get some Pokémon I went wrong. Well, I tried the trick of the Bane, it was not. I changed my DS and I have gotten into the GTS and either remained there. Any solution? The problem has to be in the sav, I think (using R4 and I have not put any trick).

***** Solution ***** (By Morpheus)

Well, as I had mentioned in my theory might not be 100% basis of this theory but let me find the "value" the caller-ID WFC, which is stored in the save of the game.

To solve the problem of Leopold-Sensei you must:

First you must have a hex editor and you should DSPokeEdit.exe as I have.

Now you must save your game at 2 times in a row, may be out of the GTS or whatever, but you must save 2 times in a row without moving (to avoid problems between saves).

After removing the save from your game (not that you, the original game or flash card), but once extracted Sacal a backup, so you'll have a backup if something goes wrong in the save to be amended.

Then open the save with the hex editor and you jump to Offset 0x4C, ahi veras 4 Bytes, the ultimate between 00 to 07 (unless you become more aware of WFC), this offset is hosting the Nintendo WFC ID you saved to your save when you sign up for the first time, your friend code if you switch this value never changes, unless you like now will oblige.

So those 4 Bytes (from 0x4C to 0x4F) and change them to be as pure ZERO:

0x4C ---> 0000 0000 <--- 0x4F

Then skip to Offset 0x73E8, this offset is hosted uploaded it to the pokemon GTS (a kind of support) of all forms in the GTS is the same pokemon. To verify that this is the pokemon checalo with Missingno that uploaded to McNasty, if this is the first pokemon Bytes 4 correspond to Attrribute (PID) of Missingno that McNasty uploaded file. Pkm here (and I did not and do not want seen search, so you checalo). Remember that the Attribute that appears on this Pokesav Decimal, so you must convert it to Hexadecimal and then flip the number, example:

If the attribute is: 2771665666 in hexedecimal is A5344302, if you will turn: 0243 34A5. This will be the last issue that needs to be on the Offset 0x73E8, but Missingno for McNasty.

This is just to verify, but this is the afuerzas pokemon. Now I do is put in quedebes Ceros all those values from the Offset 0x73E8 to Offset 0x74D5.

If you do not change these values at the end of the process that you get a new account linked to the GTS, but in such Missingno save up as follows in the GTS will be conflict and the only thing that happened is that Missingno Party to return to your or your boxes. I tell you what to delete to avoid returning to your party. But no, nothing bad would happen if you leave it in the save.

After that jump to Offset 0x8F20, this is the offset of the Friend Code, and be cleared to go back to where you allocate a new GTS FC-WFC and a new ID, which would be the same as a new account.

For that only changes to the Offset Ceros 0x8F20 to 0x8F33.

After the offset, these bills will be: 0x8F34 ---> 4A41 4441 <--- 0x8F37, so that they leave intact as well as those who are after them.

To end this saves changes to that file with the hex editor.

Now it's time to make changes to DSPokeEdit. Open the program, charging that save you just change the hex editor. And do you want change, if you want to go to the easiest part where you put the maximum of the polished medals, or even if you do not know where is it you want to make a change, not necessarily in a pokemon, but do it. Once the change in DSPokeEdit choose to save the changes in that file (the second option, the first changes to save a new file. Dat so do not be confused). We do this so that DSPokeEdit recalculate the checksums of the values that changed with the hex editor, but we do not match the checksum data and save it will say is damaged.

Once these loads save changes to your game (or ROM cartridge), while if your Pal Pad and really have no friend code. Now enter the GTS and 1st instance you refer to register your game console and the Nintendo WFC, (you will make a new account). After that came the GTS as always and this time the first ocion say STOP instead SUMMARY (not as calling in Spanish), so we now offer new pokemons and can no longer be the Missingno of McNasty in the GTS that now have a new Nintendo WFC.

As explained above can be changed any save and change the ID and the WFC Friend Code by another player's account and access your Nintendo WFC pokemons and even lower than the other player is offered or download already transferred . If the original person who comes up after the GTS (which when I copy your data to that already under pokemon), there will be no problem, so that this copy of the pokemon that jumped in the GTS and save it back saying there was a mistake and that was not transferred his pokemon, (something like clone).

This is already 100% tested and probe it with 2 accounts that I have 2 saves, so I can start lowering pokemons from other users.

Although I lack a bit of investigating how the values in hexadecimal Friend Code a save, but I will just check that. For the moment, and took 3 of 4 found Offsets that wanted to locate in the game and I've been:

1 .- Offset of the Underground with the values for the crystal you get Mr. Goods: people spoken in the Underground, fossils collected in the Underground, people who have activated your traps in the Underground and gifts given to people in the Underground. These values can be modified with Pokesav, but there are 2 in save these counters, which manages pokesav and I found, and only the values that are found to trigger the event for you from Mr. Goods for Crystal for having done the above, but if you never changed with the Pokesav dara.

2 .- Offset to add Goods (decorations) directly into the PC of the secret base, instead of the bag Goods. Look for this offset by the stock exchange Goods that do not fit all the existing Goods and assume that the PC of the secret base where fit (just as I will try), so all goats do not have to first put in the bag Goods for later transfer it to the PC in the secret base.

3 .- Offsets of the WFC-ID, deposited Pokemon in the GTS and the Friend Code (to know).

4 .- Proximamente offset hosting and win the battles lost and connections to other people and transfer pokemons with others who appear on the back of the Trainer Cards.

I am looking for neither Pokesav or DSPokeEdit can make these changes, and so far gone well with me to what I am. See you."

EDIT 3: damio, my save file is attached.

1286 - Pokemon - Pearl (U).SAV

1286 - Pokemon - Pearl (U).SAV

Edited by codemonkey85
Link to comment
Share on other sites

Finish the Platinum checksum part before you do that.

Couple more things about Pokedex. While walking on my paper route today I was pondering How the bit field would be set up for a Pokemon's dex data. Based on the values that were on my fully unlocked Pokedex (3Fh), there are 6 flags (bits 0-5) That control what parts of a Pokemon's dex are unlocked. By my count of the things the dex controls (Seen, Caught, 6 laguages, and 2 forms), there aren't enough flags to control all that stuff. Plus, it was odd that Pokemon I had seen didn't show up there.

A light went on in my head. What if Bit 1 isn't a "captured" flag, but a flag that unlocks the dex data for a certain language? The first analysis came from an English ROM, so to test this hypothesis I did the same thing on my Japanese Platinum and dumped the save file. Instead of a 02h in Piplup's area, there was 01h.

This leads me to believe that each of the bits in the area I discovered control which languages of the Pokedex have been unlocked. The flags are probably in the order: Japanese, English, French, Italian, German, and Spanish, the same order as this.

Seen data is stored in a separate area. Seems to be at 0x136C, and is a 62 byte bitfield. Each bit represents a Pokemon, and is set to 1 if the Pokemon has been seen. It appears to be ordered by Nationaldex number.

Now I need to find where the forms area is.

....On second look, maybe what I'm looking at is the Male Form area. There's another area that looks similar just above what I was looking at, and there's a flag set where Starly's data would be. I can't remember whether I saw a female Starly or not, but it's likely. I'll do some more research.

If that is true, it's possible that the 2 formes areas are combined to figure out which Pokemon have been seen.

---------- Post added at 07:34 PM ---------- Previous post was at 07:15 PM ----------

Nope, that seems to be the "Seen" area. Need to find where those formes are stored.

Link to comment
Share on other sites

Finish the Platinum checksum part before you do that.

I attached a checksum fixer.

The exe version is for windows. You also need the Qt files. I put it separate because those won't change. So once there is updates only the executable must be redownloaded.

PPSE.tar.gz is for linux as well. It may or may not need the Qt files. Probably does. I would need someone with linux for testing.

Also if someone has a mac and wants to sign up to make a mac app of this please let me know.

PPSE.exe

Qt.zip

PPSE.tar.gz

PPSE.exe

Qt.zip

PPSE.tar.gz

Edited by SCV
Link to comment
Share on other sites

Great job so far, Jiggy! I still don't get why the data is spread out like that instead of in one big area. I guess it worked out better for bit packing or whatever.

Thanks for posting that, SCV. I was on a little bit of a tangent there with the GTS thing, so I'm glad you had that done. :D

Speaking of the GTS thing, turns out when you upload a Pokémon to the GTS, a copy is made and kept at 0x73E8 (party sized at 236 bytes). A lot of people will be surprised to hear that.

Link to comment
Share on other sites

Great job so far, Jiggy! I still don't get why the data is spread out like that instead of in one big area. I guess it worked out better for bit packing or whatever.

Thanks for posting that, SCV. I was on a little bit of a tangent there with the GTS thing, so I'm glad you had that done. :D

Speaking of the GTS thing, turns out when you upload a Pokémon to the GTS, a copy is made and kept at 0x73E8 (party sized at 236 bytes). A lot of people will be surprised to hear that.

It's not that spread out. It's all in one area, the area just appears to be split into 3 sections for "seen", formes (I think, still need to research this), and languages.

An exact copy? What happens if the Pokemon there is different from the one in the GTS?

Link to comment
Share on other sites

Well, if you go back to the GTS, you can take the Pokémon you uploaded back out, or the trade was completed and you download the new Pokémon. Or, if there's a problem, the backup Pokémon is restored to the PC or your party.

In any case, the backup data is presumably erased. I don't think the backup being any different from the actual GTS Pokémon would make a difference. I will have to experiment with it some more.

EDIT: Added the game's friend code to the to-do list; where it's supposedly located in the save file, one byte appears to be missing from the FC value as seen on the Pal Pad.

Link to comment
Share on other sites

Here's what I know so far about Pokedex.

4 bytes at 0x1640 control which extensions to the Pokedex have been unlocked. In order, they are: Forme viewer, Language viewer, Sinnoh dex, and National dex. They are 00h normally, and 01h when the respective extension is gained.

The 62 bytes at 0x132C store which Pokemon you have captured. Each bit represents one Pokemon, in National order. The bit is 0b normally, and set to 1b when the Pokemon is caught.

The 62 bytes at 0x136C store which Pokemon you have captured. Structure is the same as "Captured".

The 62 bytes at 0x13AC and 0x13EC store which of the forms you have unlocked for each Pokemon. So far, I have only reviewed a few cases of Pokemon with how their gender forms are stored, so I do not know how Unown, Giratina, Deoxys, Burmy, Wormadam, Shellos, Gastrodon, and Shaymin work yet. These, I think, are the only things that remain for me to figure out.

The first set of 62 bytes determines what the default form is that is shown in the Pokedex. Structure is the same as "Seen" and "Caught". The bit is set to 0b if Male is the default form, and 1b if Female is the default form.

The second set of 62 bytes determines if the other form has been unlocked. If only the first form of a Pokemon has been seen, the bit in this section is identical to the corresponding bit in the first section. If both forms have been seen, the bit is different.

The final section of the Pokedex is at 0x1451, and is 493 bytes long. This area controls which languages you have unlocked for each Pokemon's Dex entry. Each byte represents the data for one Pokemon (in National dex order, of course). Each byte is a bitfield that determines which languages have been obtained for that Pokemon. The bitfield is structured like this:

Bit 0: Japanese

Bit 1: English

Bit 2: French

Bit 3: German

Bit 4: Italian

Bit 5: Spanish

Bit 6: Unknown/Nothing

Bit 7: Unknown/Nothing

I think that's everything so far. Thanks go to CodeMonkey for trading me Pokemon to help me work out the bitfield for language, and SCV for inspiring me about how the forms sections work.

Link to comment
Share on other sites

Jiggy-Ninja, thanks again for your continued help.

Is this GTS thing connected with our tip (tested and working) to fix the legal pkm file on GTS ?

I am not sure about the fixing part. All I know for sure is that a copy of the Pokémon is made and reserved in the save file.

Perhaps we should try uploading a Pokémon with some kind of error that this "GTS fix" can fix, and compare what was uploaded to what was backed up. I wonder if the backup would be fixed, or if the fix happens when you reclaim the Pokémon instead (meaning the fix happens on the Nintendo WFC servers).

Link to comment
Share on other sites

or if the fix happens when you reclaim the Pokémon instead (meaning the fix happens on the Nintendo WFC servers).

Here there's the key point. Putting a a legal pokesaved pokemon on GTS and takin'it back you'll notice this :

goddamn xD .. preston was right .. the GTS trading things make the pokesav's trace dissapear xD

i already see the PKM file and it screwed up at

40h(0x028) - 51h(0x033)

which also makes 6h-7h (checksum) also screwed up >_<

and that will make the "BIN" file change drastically =_= ...so that, the pokesav trace in the "BIN" file could be easily identified xD ...

And

just to let you know

Offset Contents

0x28-0x29 Move 1 ID

0x2A-0x2B Move 2 ID

0x2C-0x2D Move 3 ID

0x2E-0x2F Move 4 ID

0x30 Move 1 Current PP

0x31 Move 2 Current PP

0x32 Move 3 Current PP

0x33 Move 4 Current PP

as i said before 40h(0x028) - 51h(0x033) are the place where contain the trace made by pokesav ,

and the trace is in "moveset" sector xD ..

so the conclusion of this trace thing (after trading to GTS using 3 samples) .. editing moveset using pokesav will make your pokemon not legal =_=

so as you know that trading through GTS will fix the moveset "hex" values (which is the trace)

but that's not all that will be fixed , it will also change the "checksum" into the "right" value

Link to comment
Share on other sites

Unown and Deoxys forms sections have been worked out for the Pokedex. Thanks again to CodeMonkey for his patient trading.

I don't feel like posting all the details until I get the rest of the oddball Pokemon worked out.

---------- Post added at 04:31 PM ---------- Previous post was at 04:29 PM ----------

Oh, and at 0x1328, the 4 bytes there spell out BEEFCAFE. Lol.

Link to comment
Share on other sites

EDIT: I have added information about Diamond and Pearl's Pokedex towards the bottom of this post.

Platinum's Pokedex is DONE. Over. Finished. Complete. I know everything there is to know about it.

Acknowledgments: CodeMonkey85 and Kaarosu for patiently trading me the Pokemon I needed to see how it was working. And SCV for the inspiration on how the Gender areas worked.

A note about my convention with Hex numbers: Hexadecimal memory addresses begin with the prefix 0x-, while hex values end with the suffix -h. I don't know why I do this, it's just how I write things down. Binary numbers will end with the suffix -b.

To recap:

4 bytes at 0x1640 control which extensions to the Pokedex have been unlocked. In order, they are: Forme viewer, Language viewer, Sinnoh dex, and National dex. They are 00h normally, and 01h when the respective extension is gained.

The 62 bytes at 0x132C store which Pokemon you have captured. Each bit represents one Pokemon, in National order. The bit is 0b normally, and set to 1b when the Pokemon is caught.

The 62 bytes at 0x136C store which Pokemon you have seen. Structure is the same as "Captured".

The 62 bytes at 0x13AC and 0x13EC store which genders you have unlocked for each Pokemon. This is used to determine what shows up in the forme viewer for Pokemon that are not among the Special Cases. For the Special cases Burmy, Wormadam, Spinda, Gastrodon, and Shellos, gender information is stored here exactly the same as other Pokemon, even though it isn't used for anything.

The first set of 62 bytes determines what the default form is that is shown in the Pokedex for Pokemon that are not among the Special Cases. Structure is the same as "Seen" and "Caught". The bit is set to 0b if Male is the default form, and 1b if Female is the default form.

The second set of 62 bytes determines if the other gender has been unlocked. If only the first gender of a Pokemon has been seen, the bit in this section is identical to the corresponding bit in the first section. If both genders have been seen, the bit is inverted.

The final section of the Pokedex is at 0x1451, and is 493 bytes long. This area controls which languages you have unlocked for each Pokemon's Dex entry. Each byte represents the data for one Pokemon (in National dex order, of course). Each byte is a bitfield that determines which languages have been obtained for that Pokemon. The bitfield is structured like this:

Bit 0: Japanese

Bit 1: English

Bit 2: French

Bit 3: German

Bit 4: Italian

Bit 5: Spanish

Bit 6: Unknown/Nothing

Bit 7: Unknown/Nothing

Now for the Special Cases. These are the Pokemon whose forms in the Pokedex are not their different genders, and thus their form information is stored in a different area. I think these Pokemon took me longer to research than the entire rest of the Pokedex.

The Special Cases are: Unown, Shaymin, Giratina, Shellos, Gastrodon, Burmy, Wormadam, Spinda, Rotom, Deoxys. Arceus is not one of the Special Cases as it appears that his type forms do not show up in the Pokedex.

Unown: Unown's form information is stored in 28 bytes starting at 0x1434. These bytes are all FFh to begin with, and change, from beginning to end to a different value that represents the Unown forms you have seen. The Unown are represented by 00h = A, 01h = B, ..., 1Ah = !, 1Bh = ?. The order of the number determines the order that the Unown appear in your Pokedex. The first form you encounter is the default sprite that appears when scrolling down the list.

Shaymin: The byte at 0x1648 determines which of Shaymin's forms have been seen. Depending on which forms have been seen, and in which order, the value of this byte goes by the following table:

None: FFh

Land: FCh

Land_Sky: FEh

Sky: FFh (prediction)

Sky_Land: FDh (prediction)

The last two are legally impossible to occur, but I still wanted to test them for the sake of completeness. However, even though SCV's code allowed Rotom's and Giratina's alt forms to be traded on Wifi, Shaymin, for some reason, couldn't.

Giratina: The byte at 0x1649 determines Giratina's forms. Unlike Shaymin, it is possible to see Another Giratina before an Origin Giratina, so I made sure to test all cases. Like Shaymin, it follows a similar table:

None: FFh

Another: FCh

Origin: FFh

Origin_Another: FDh

Another_Origin: FEh

Shellos and Gastrodon: Shellos's forms are determined by the byte at 0x1430. Gastrodon's forms are in the byte at 0x1431. Both follow the same pattern, which is also similar to Giratina's and Shaymin's above:

None: FFh

Pink: FCh

Blue: FFh

Pink_Blue: FEh

Blue_Pink: FDh

Burmy and Wormadam: Burmy's forms are in the byte at 0x1432. Wormadam's forms are in the byte at 0x1433. Both bytes follow the same pattern.

The byte is FFh normally. The bottom 6 bytes determine which of Burmy/Worm's forms have been seen, and in which order, with 2 bits per form. The bottommost 2 bits are for the first form seen.

Grass = 00b

Ground = 01b

Steel = 10b

So, for example, if the steel form is seen first, and the grass form second, the byte will become F2h (11|11|00|10b).

Spinda: The default Spinda sprite in your Pokedex will have the same spot pattern as the first Spinda you see. Because Spinda's spot pattern is determined by it's PID, the PID of the first Spinda you see is stored in the 4 bytes at 0x142C. The area is 00000000h when no Spinda has been seen yet.

Rotom: Rotom's forms are determined by the 4 bytes at 0x1644. Each Rotom form uses 3 bits of that data, for a total of 18/32 bits used (one byte remains untouched even after all the forms have been discovered.

The word is initially FFFFFFFFh when no forms have been seen. The bottom 18 bits store the forms that have been unlocked and their order, just like the Burmy/Wormadam section. The form's binary representations are:

Normal: 000b

Heat: 001b

Wash: 010b

Frost: 011b

Spin: 100b

Cut: 101b

Finally, Deoxys. Its forms and order are stored in two different bytes, one at 0x136B Hereafter referred to as the first byte), the other at 0x13AB (hereafter referred to as the second byte).

Both bytes are initially FFh. The bottom 4 bits of the first byte store which form you've seen first. The top 4 bits of the first byte store the second form you've seen. The bottom half of the second byte have the third form, and the top half the 4th.

The numbers for the 4 forms are:

Normal: 0h

Attack: 1h

Defense: 2h

Speed: 3h

FINALLY!! Everything is now know about Platinum's Pokedex. DP's Pokedex is much the same. Only things different are the lack of the new forms and the fact that only 18 Pokemon had foreign language entries. I'll look for those later.

Diamond and Pearl

I will only include locations for most of this section, because DP's Pokedex is largely the same, structurally, as Plat's. I shall note the differences where appropriate.

Form Viewer Flag: 0x1404 (Note that this is not in the same place relative to the other flags as it is in Plat.)

Language Extension Flag: 0x1413

Sinnoh Dex Flag: 0x1414

National Dex Flag: 0x1415

Captured: 0x12E0

Seen: 0x1320

First Gender Area: 0x1360

Second Gender Area: 0x13A0

Special forms:

Unown: 0x13E8

Spinda: 0x13E0

Shellos: 0x13E4

Gastrodon: 0x13E5

Burmy: 0x13E6

Wormadam: 0x13E7

Deoxys Byte 1: 0x131F

Deoxys Byte 2: 0x135F

Languages

1 byte per Pokemon, from 0x1405 to 0x1412, in the following order:

Ekans, Pikachu, Psyduck, Ponyta, Staryu, Magikarp, Wobbuffet, Heracross, Sneasel, Teddiursa, Houndour, Wingull, Slakoth, Roselia.

Language flags are structured the same in the byte as in Plat.

Edited by Jiggy-Ninja
Link to comment
Share on other sites

Added the game's friend code to the to-do list; where it's supposedly located in the save file, one byte appears to be missing from the FC value as seen on the Pal Pad.

I'm pretty sure there is nothing missing, the thing is that there is only one possibility to generate a valid friend code with these 'incomplete' values, so the missing byte is redundant

You can see this when you try to put the incomplete bytes of a valid friend code in your save and checking your Pal pad. It will be correct without the need of change any more bytes than these :rolleyes:

Link to comment
Share on other sites

This wasn't really a part of the list, or a goal for this thread, but I figured I'd post it here anyway.

I have finally figured out how the Pokémon DS games figure out which Characteristic to display in the Trainer Memo in the case of a tie for highest IVs.

Take the PID Mod 6, and that gives you the index number of a stat in this order: HP, Attack, Defense, Speed, Special Attack, Special Defense. In the event of a tie in IVs, the first IV checked is the result of the PID Mod 6. If that IV is not part of the tie, it moves on to the next index number in the aforementioned order. If it goes past 5 (Special Defense), it wraps around back to 0 (HP). When it finds an IV that is part of the tie, that is the IV that will determine the Characteristic displayed.

Not bad, eh?

Link to comment
Share on other sites

I have attached a save file to make it convinient having to start over for some things. Right now, I am trying to find where the Running Shoes variable is (AR makes this esier).

[Edit]:

I have found that the running shoes obtained variable is at:

0x000412C6

It is equal to 1 if they are obtained. Based on Gender, I assume that 0 would be not obtained, and anything above 1 would still be obtained.

Apparently my tool works great. Compare two save files different enough, and the possibilitys shrink quickly.

[Edit]

Removed attachment. I'm sure that other saves can easily be found.

Edited by evandixon
Link to comment
Share on other sites

I'll look at the list and see which are the easiest to find.

---------- Post added at 11:10 AM ---------- Previous post was at 10:56 AM ----------

I was trying to find the Regestered Key Item location, but I can't seem to narrow down the possibilities further than this: (In Decimal offsets)

262180

262184

262188

262280

262281

265620

292068

311536

311550

311551

I've run out of time for the day, so I cannot do any more today. Perhaps someone can take it from here. My tool got me this far.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...