Jump to content

Multi Theft Auto now opened for business


darkdreamingdan

Recommended Posts

We have been preparing this announcement for some time - this will mark the end of our "Developer previews". We are working towards releasing the 1.0 version; this version is no longer a "preview" and will be a turning point for the release of Multi Theft Auto.

Why? Today we are marking a new milestone in the history of Multi Theft Auto. After over 11000 revisions since 2004, contributions by over 16 world-wide developers, 1554 files and well over 550.000 lines of mostly C/C++ code, we have made the decision to re-launch Multi Theft Auto as an open-source project.

Of course, the migration to open-source is more than just slamming your undocumented source code in a zip up for anyone that is interested. In the past weeks, we have spent significant time cleaning up our entire code repository, by adding proper documentation in files and tagging them with headers, cleaning up any obsolete or ugly code we came across, and backtracking the logs of all files to ensure that the proper credits to developers were noted inside each individual file.

By open sourcing our project, we are encouraging anyone who is willing to participate in this project, to participate. For that reason, we are not "just" offering our source code: we have also opened our bug tracker and will be offering public access to our nightly build system that will be compiling a build every day (and has been long used for testing purposes). This way, any developer will be able to run the latest revisions, file bugs or submit patches.

Some may be concerned with us seemingly throwing our code and all its secrets out on the streets. Remember that, as we have seen in the past, a proper and solid multiplayer modification needs a lot more than just memory addresses and offsets. We hope that developers will be attracted towards contributing to our project, which is fairly straightforward and has an already established user base, instead of starting from scratch.

As of today, our entire code repository will be available from Google Code, which will be hosting our project. If you are interested in participating in development, you may be familiar with the process with other open-source projects: any developer that thinks his or her modifications should be merged into our trunk can submit a patch containing their modifications to our bug tracker. Each patch will then be reviewed and hopefully merged by the development team.

We believe that access to our source code will not only encourage developers to contribute, but will also be important for educational reasons: our modification is built in a highly modularized class-based design similar to that of other somewhat bigger projects. Of course, it is far from perfect, but this leaves some good room for improvement.

By no means does the migration mean that development has stopped or that progress was halted: we've simply decided to try a new approach to replace the old development style. The community can now follow any progress that is made, and even see the changes for themselves. By open sourcing, we open up the possibility of allowing unlimited community contribution - through our bugtracker, the development wiki, the community center, and of course the code itself.

Bear in mind that this migration does not imply a new release. We will be restarting our versioning, meaning that the next first release will be 1.0. Our roadmap will be available shortly on our bug tracker, so everyone will be able to track our development towards 1.0 and future versions. Nightly developer builds are also available, but are not recommended for anything else but development usage, as they will contain bugs and are updated daily.

In order to access our development facilities, head over to our community page (you'll need an account). If you're interested in checking out the code repository, head over to our Google Code project page. We'll be working towards smoothening everything out the next few days.

-The MTA team.

P.S. Due to abuse on the frontpage comments, the forums will now facilitate this.

Link to comment
  • Replies 96
  • Created
  • Last Reply

Top Posters In This Topic

FIRST REPLY MUHAHA

Anyways, at times like these I wish I knew C++ and could contribute with something instead of just sitting here on my ass (not that coders do anything else, mind) and watch things progress.. at least, I hope we can do that now. :D

I hope this will help MTA move more quickly along, and pwn even more than it already does.

Link to comment

Nice initiative, but......

The cheaters will manipulate the source of MTA and make his own cheats, hacks, etc.... I know that the liberation of the source of MTA is for better, but cheaters are millions in the worlds, and very few know C++, like netzeek, who hacked SA:MP, One.cl and many other servers.

Well, that was my opinion, please not take it so badly

Link to comment

Nice! That means a faster way of getting things synced, faster work. Though it may grow out many different spawns, and many faulty/untested/unclear/wacky things. But the good side is much bigger and worth the risk.

Good job! let's hope you did not taint the thing.

Link to comment
I guess that's possible. MTA 0.5's code is probably some of the worst you've ever seen. It's held together with sticky tape....

I know I ask about MTA:Race every time you make an announcement about MTA, and it must be bugging you a little but... what about MTA:Race? :) You will be my personal hero if you release MTA:Race source too.

Edited by Guest
Link to comment
  • MTA Team
Could be quite good for the progress of the mod, but could it also mean that there might be a craploads of different MTA versions and editions? If so, it might confuse some of the newcomers to the community :S

Not really, nightly developer builds are NOT intended for regular usage and none or very limited support will be given for them. They're intended only for people who know what they can use them for (so eg. for making their resources compatible with the upcoming version). Same goes for third party SVN builds - they shouldn't be used by general public.

Just wait for a stable version (1.0) , it shouldn't be that far away.

By eAi>> I guess that's possible. MTA 0.5's code is probably some of the worst you've ever seen. It's held together with sticky tape....

I know I ask about MTA:Race every time you make an announcement about MTA, and it must be bugging you a little but... what about MTA:Race? :) You will be my personal hero if you release MTA:Race source too.

Sorry, this isn't going to happen. You should switch to our upcoming stable DM version once it's ready. It should fully replicate every aspect of race, and will even extend its possibilities to the extent it could never reach - due to Lua scripting, server modules and completely rewritten and improved map editor. Not to mention better synchronisation and more creative maps (due to custom car/object model support).

Link to comment

Its strange how this code is now open source, only 1 week before gta 4 for pc is released. Basically you know you cant get this version of MTA right, and your loyal followers who stick up for you will not accept that you need help. As from November 3rd 2008, this coding will become redunant, due the gta 4 for the pc relase. You know this, that is why u have taken this step. I can NOT take away though that i love MTA and the people and i love MTA 0.5 for vice city. I am very saddened by the fact that you never got mta san andreas fully up and running.

Link to comment
Its strange how this code is now open source, only 1 week before gta 4 for pc is released. Basically you know you cant get this version of MTA right, and your loyal followers who stick up for you will not accept that you need help. As from November 3rd 2008, this coding will become redunant, due the gta 4 for the pc relase. You know this, that is why u have taken this step. I can NOT take away though that i love MTA and the people and i love MTA 0.5 for vice city. I am very saddened by the fact that you never got mta san andreas fully up and running.

You seem to be under the impression development is stopping, and this is our "last hurrah". Well you're wrong, if you read the full post you would have seen that we're continuing to work on MTA and GTA4 is not a good enough reason for us to stop. And though you probably wont believe me when i say this, GTA4 had nothing to do with this decision whatsoever.

Link to comment

Indeed, GTA4 has been discussed in the team, to some extent, but the open sourcing was nothing to do with it. We've been meaning to do it for years, and have discussed it over and over. It seemed a good time to do it, as the code is pretty stable and we need all the help we can get to make MTA as good as it can be.

Link to comment
This is both good and bad news, this means increased development and better releases, but the bad is, with anything open source means that the hackers can view the source code and make it easier to find security holes. Do you guys (MTA Team) have a plan on how to keep these hackers under control?

Of course we aren't stupid. The network module is not open sourced so people will not be able to play games they compiled on servers we released.

Link to comment

All these people commenting saying "omg hax!" doesn't realize that:

1) the network module is closed

2) if the "black hat" hackers can see the security holes, then so can the community, in which case they get patched up quicker

3) hackers ("white hat", or "black hat") don't need open source to hack, otherwise MTA wouldn't exist

4) BE HAPPY! MTA IS NOW OPEN SOURCE! :D:D:D:D:D:D

P.S.: anyone who didn't read this post is SanZor

Link to comment

big proplems when useing the source code

Compiler: Visual Studio PRO 2008 SP1

OS:Vista

------ Build started: Project: Shared - XML Module, Configuration: Nightly Win32 ------ 
Linking... 
   Creating library ./Release/xmll.lib and object ./Release/xmll.exp 
CXMLAttributeImpl.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(struct std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::_Has_debug_it)" (__imp_??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@U_Has_debug_it@01@@Z) referenced in function "public: __thiscall TiXmlAttribute::TiXmlAttribute(char const *,char const *)" (??0TiXmlAttribute@@QAE@PBD0@Z) 
CXMLFileImpl.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(struct std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::_Has_debug_it)" (__imp_??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@U_Has_debug_it@01@@Z) 
tinyxml.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(struct std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::_Has_debug_it)" (__imp_??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@U_Has_debug_it@01@@Z) 
tinyxmlparser.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(struct std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::_Has_debug_it)" (__imp_??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@U_Has_debug_it@01@@Z) 
CXMLAttributesImpl.obj : error LNK2019: unresolved external symbol __imp___CrtDbgReportW referenced in function "public: class CXMLAttribute * const & __thiscall std::list<class CXMLAttribute *,class std::allocator<class CXMLAttribute *> >::_Const_iterator<1>::operator*(void)const " (??D?$_Const_iterator@$00@?$list@PAVCXMLAttribute@@V?$allocator@PAVCXMLAttribute@@@std@@@std@@QBEABQAVCXMLAttribute@@XZ) 
CXMLNodeImpl.obj : error LNK2001: unresolved external symbol __imp___CrtDbgReportW 
CXMLAttributesImpl.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) void __cdecl std::_Debug_message(wchar_t const *,wchar_t const *,unsigned int)" (__imp_?_Debug_message@std@@YAXPB_W0I@Z) referenced in function "public: class CXMLAttribute * const & __thiscall std::list<class CXMLAttribute *,class std::allocator<class CXMLAttribute *> >::_Const_iterator<1>::operator*(void)const " (??D?$_Const_iterator@$00@?$list@PAVCXMLAttribute@@V?$allocator@PAVCXMLAttribute@@@std@@@std@@QBEABQAVCXMLAttribute@@XZ) 
CXMLNodeImpl.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) void __cdecl std::_Debug_message(wchar_t const *,wchar_t const *,unsigned int)" (__imp_?_Debug_message@std@@YAXPB_W0I@Z) 
CXMLAttributesImpl.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall std::_Container_base_secure::~_Container_base_secure(void)" (__imp_??1_Container_base_secure@std@@QAE@XZ) referenced in function "protected: __thiscall std::_Container_base_aux_alloc_empty<class std::allocator<class CXMLAttribute *> >::~_Container_base_aux_alloc_empty<class std::allocator<class CXMLAttribute *> >(void)" (??1?$_Container_base_aux_alloc_empty@V?$allocator@PAVCXMLAttribute@@@std@@@std@@IAE@XZ) 
CXMLNodeImpl.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::_Container_base_secure::~_Container_base_secure(void)" (__imp_??1_Container_base_secure@std@@QAE@XZ) 
CXMLAttributesImpl.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall std::_Container_base_secure::_Container_base_secure(void)" (__imp_??0_Container_base_secure@std@@QAE@XZ) referenced in function "protected: __thiscall std::_Container_base_aux_alloc_empty<class std::allocator<class CXMLAttribute *> >::_Container_base_aux_alloc_empty<class std::allocator<class CXMLAttribute *> >(class std::allocator<class CXMLAttribute *>)" (??0?$_Container_base_aux_alloc_empty@V?$allocator@PAVCXMLAttribute@@@std@@@std@@IAE@V?$allocator@PAVCXMLAttribute@@@1@@Z) 
CXMLNodeImpl.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::_Container_base_secure::_Container_base_secure(void)" (__imp_??0_Container_base_secure@std@@QAE@XZ) 
xmll.dll : fatal error LNK1120: 5 unresolved externals 
Build log was saved at "file://j:\mta\My MTA\Source\obj\shared\xml\BuildLog.htm" 
Shared - XML Module - 13 error(s), 0 warning(s) 
------ Build started: Project: Server - Deathmatch, Configuration: Nightly Win32 ------ 
Compiling... 
StdInc.cpp 
Compiling precompiled header. 
j:\mta\my mta\source\mta10_server\mods\deathmatch\StdInc.h(9) : fatal error C1083: Cannot open include file: 'pthread.h': No such file or directory 
Build log was saved at "file://j:\mta\My MTA\Source\obj\server\deathmatch\BuildLog.htm" 
Server - Deathmatch - 1 error(s), 0 warning(s) 
------ Build started: Project: Client - Deathmatch, Configuration: Nightly Win32 ------ 
Compiling... 
StdInc.cpp 
Compiling precompiled header. 
j:\mta\my mta\source\mta10\mods\shared_logic\CClientEntity.h(111) : warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 
        E:\Program Files\Microsoft Visual Studio 9.0\VC\include\string.h(157) : see declaration of 'strncpy' 
j:\mta\my mta\source\mta10\mods\shared_logic\CClientGUIElement.h(63) : error C3867: 'CClientGUIElement::_CallbackEvent1': function call missing argument list; use '&CClientGUIElement::_CallbackEvent1' to create a pointer to member 
j:\mta\my mta\source\mta10\mods\shared_logic\CClientGUIElement.h(63) : error C2661: 'CGUICallback<Ret,Arguments>::CGUICallback' : no overloaded function takes 2 arguments 
        with 
        [ 
            Ret=bool, 
            Arguments=CGUIElement * 
        ] 
j:\mta\my mta\source\mta10\mods\shared_logic\CClientGUIElement.h(64) : error C3867: 'CClientGUIElement::_CallbackEvent2': function call missing argument list; use '&CClientGUIElement::_CallbackEvent2' to create a pointer to member 
j:\mta\my mta\source\mta10\mods\shared_logic\CClientGUIElement.h(64) : error C2661: 'CGUICallback<Ret,Arguments>::CGUICallback' : no overloaded function takes 2 arguments 
        with 
        [ 
            Ret=bool, 
            Arguments=CGUIElement * 
        ] 
j:\mta\my mta\source\mta10\mods\shared_logic\lua\CLuaMain.h(74) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 
        E:\Program Files\Microsoft Visual Studio 9.0\VC\include\string.h(74) : see declaration of 'strcpy' 
Build log was saved at "file://j:\mta\My MTA\Source\obj\client\deathmatch\BuildLog.htm" 
Client - Deathmatch - 4 error(s), 2 warning(s) 
------ Build started: Project: Client - GUI, Configuration: Nightly Win32 ------ 
Compiling... 
cl : Command line warning D9035 : option 'Wp64' has been deprecated and will be removed in a future release 
StdInc.cpp 
Compiling precompiled header. 
j:\mta\my mta\source\mta10\gui\StdInc.h(3) : fatal error C1083: Cannot open include file: 'CEGUI.h': No such file or directory 
Build log was saved at "file://j:\mta\My MTA\Source\obj\client\gui\BuildLog.htm" 
Client - GUI - 1 error(s), 1 warning(s) 
------ Build started: Project: Server - Core, Configuration: Beta Win32 ------ 
Linking... 
LINK : fatal error LNK1181: cannot open input file 'xml/lib/mxml.lib' 
Build log was saved at "file://j:\mta\My MTA\Source\MTA10_Server\core\Beta\BuildLog.htm" 
Server - Core - 1 error(s), 0 warning(s) 
------ Build started: Project: Client - Multiplayer SA, Configuration: Nightly Win32 ------ 
Compiling... 
StdInc.cpp 
Compiling precompiled header. 
j:\mta\my mta\source\mta10\multiplayer_sa\CRemoteDataSA.h(77) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
Build log was saved at "file://j:\mta\My MTA\Source\obj\client\multiplayer_sa\BuildLog.htm" 
Client - Multiplayer SA - 1 error(s), 0 warning(s) 
------ Build started: Project: Client - Game SA, Configuration: Nightly Win32 ------ 
Compiling... 
CTaskManagerSA.cpp 
.\CTaskManagerSA.cpp(233) : error C2065: 'i' : undeclared identifier 
.\CTaskManagerSA.cpp(233) : error C2065: 'i' : undeclared identifier 
.\CTaskManagerSA.cpp(233) : error C2065: 'i' : undeclared identifier 
.\CTaskManagerSA.cpp(235) : error C2065: 'i' : undeclared identifier 
CHandlingManagerSA.cpp 
.\CHandlingManagerSA.cpp(38) : error C2065: 'i' : undeclared identifier 
.\CHandlingManagerSA.cpp(38) : error C2065: 'i' : undeclared identifier 
.\CHandlingManagerSA.cpp(38) : error C2065: 'i' : undeclared identifier 
.\CHandlingManagerSA.cpp(40) : error C2065: 'i' : undeclared identifier 
.\CHandlingManagerSA.cpp(40) : error C2065: 'i' : undeclared identifier 
.\CHandlingManagerSA.cpp(65) : error C2065: 'i' : undeclared identifier 
.\CHandlingManagerSA.cpp(65) : error C2065: 'i' : undeclared identifier 
.\CHandlingManagerSA.cpp(65) : error C2065: 'i' : undeclared identifier 
.\CHandlingManagerSA.cpp(67) : error C2065: 'i' : undeclared identifier 
CGameSA.cpp 
.\CGameSA.cpp(101) : error C2065: 'i' : undeclared identifier 
.\CGameSA.cpp(101) : error C2065: 'i' : undeclared identifier 
.\CGameSA.cpp(101) : error C2065: 'i' : undeclared identifier 
.\CGameSA.cpp(103) : error C2065: 'i' : undeclared identifier 
.\CGameSA.cpp(103) : error C2228: left of '.SetModelID' must have class/struct/union 
.\CGameSA.cpp(103) : error C2065: 'i' : undeclared identifier 
CAnimManagerSA.cpp 
.\CAnimManagerSA.cpp(27) : error C2065: 'i' : undeclared identifier 
.\CAnimManagerSA.cpp(27) : error C2065: 'i' : undeclared identifier 
.\CAnimManagerSA.cpp(27) : error C2065: 'i' : undeclared identifier 
.\CAnimManagerSA.cpp(28) : error C2065: 'i' : undeclared identifier 
.\CAnimManagerSA.cpp(28) : error C2065: 'i' : undeclared identifier 
.\CAnimManagerSA.cpp(29) : error C2065: 'i' : undeclared identifier 
.\CAnimManagerSA.cpp(29) : error C2065: 'i' : undeclared identifier 
.\CAnimManagerSA.cpp(29) : error C2065: 'i' : undeclared identifier 
.\CAnimManagerSA.cpp(30) : error C2065: 'i' : undeclared identifier 
.\CAnimManagerSA.cpp(30) : error C2065: 'i' : undeclared identifier 
Build log was saved at "file://j:\mta\My MTA\Source\obj\client\game_sa\BuildLog.htm" 
Client - Game SA - 29 error(s), 0 warning(s) 
------ Build started: Project: Client - Core, Configuration: Nightly Win32 ------ 
Compiling... 
CSettings.cpp 
.\CSettings.cpp(89) : warning C4482: nonstandard extension used: enum 'CGUIGridList::SelectionMode' used in qualified name 
.\CSettings.cpp(182) : warning C4482: nonstandard extension used: enum 'CSettings::eCheckBox' used in qualified name 
.\CSettings.cpp(189) : warning C4482: nonstandard extension used: enum 'CSettings::eCheckBox' used in qualified name 
.\CSettings.cpp(195) : warning C4482: nonstandard extension used: enum 'CSettings::eCheckBox' used in qualified name 
.\CSettings.cpp(201) : error C3867: 'CSettings::OnLoginButtonClick': function call missing argument list; use '&CSettings::OnLoginButtonClick' to create a pointer to member 
.\CSettings.cpp(201) : error C2661: 'CGUICallback<Ret,Arguments>::CGUICallback' : no overloaded function takes 2 arguments 
        with 
        [ 
            Ret=bool, 
            Arguments=CGUIElement * 
        ] 
.\CSettings.cpp(240) : warning C4482: nonstandard extension used: enum 'CMainMenu::eMenuOptions' used in qualified name 
.\CSettings.cpp(242) : warning C4482: nonstandard extension used: enum 'CMainMenu::eMenuOptions' used in qualified name 
.\CSettings.cpp(244) : warning C4482: nonstandard extension used: enum 'CMainMenu::eMenuOptions' used in qualified name 
.\CSettings.cpp(797) : warning C4482: nonstandard extension used: enum 'CSettings::eCheckBox' used in qualified name 
.\CSettings.cpp(799) : warning C4482: nonstandard extension used: enum 'CMainMenu::eMenuOptions' used in qualified name 
.\CSettings.cpp(799) : warning C4482: nonstandard extension used: enum 'CMainMenu::eMenuOptions' used in qualified name 
.\CSettings.cpp(804) : warning C4482: nonstandard extension used: enum 'CSettings::eCheckBox' used in qualified name 
.\CSettings.cpp(806) : warning C4482: nonstandard extension used: enum 'CMainMenu::eMenuOptions' used in qualified name 
.\CSettings.cpp(806) : warning C4482: nonstandard extension used: enum 'CMainMenu::eMenuOptions' used in qualified name 
.\CSettings.cpp(811) : warning C4482: nonstandard extension used: enum 'CSettings::eCheckBox' used in qualified name 
.\CSettings.cpp(813) : warning C4482: nonstandard extension used: enum 'CMainMenu::eMenuOptions' used in qualified name 
.\CSettings.cpp(813) : warning C4482: nonstandard extension used: enum 'CMainMenu::eMenuOptions' used in qualified name 
Build log was saved at "file://j:\mta\My MTA\Source\obj\client\core\BuildLog.htm" 
Client - Core - 2 error(s), 16 warning(s) 
========== Build: 0 succeeded, 8 failed, 2 up-to-date, 0 skipped ========== 
  

Link to comment
I guess that's possible. MTA 0.5's code is probably some of the worst you've ever seen. It's held together with sticky tape....

I know I ask about MTA:Race every time you make an announcement about MTA, and it must be bugging you a little but... what about MTA:Race? :) You will be my personal hero if you release MTA:Race source too.

Sorry, this isn't going to happen. You should switch to our upcoming stable DM version once it's ready. It should fully replicate every aspect of race, and will even extend its possibilities to the extent it could never reach - due to Lua scripting, server modules and completely rewritten and improved map editor. Not to mention better synchronisation and more creative maps (due to custom car/object model support).

Why not, though? If MTA 0.5 is "possible" according to eAi, I don't see why not. :) The only reason I can see, really, is if you want MTA:Race to stay buggy, so people have more incentive to use MTA:DM. Anyway, I remember hearing similar statements (it's not going to happen!) back when ASE went down, and still eAi heroically decided to fix Race one last time. I will just cross my fingers and wait for eAi to reply. :)

BTW, how come I can't use BBCode? :/ It says "BBCode is OFF", and I can't find any way to enable it.

Edited by Guest
Link to comment
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...