Eagletec KM120 Wired Keyboard and Mouse Combo Slim, Flat & Quiet, Ergonomic Full Size 104 Keys Keyboard & Small Portable Mouse for Windows PC (Black Wired Keyboard & Mouse Set) RAGE Campaign Edition - Mac. BioShock Infinite (Mac) Online Game Code Currently unavailable. Doom 3 is a horror first-person shooter video game developed by id Software and published by Activision. Doom 3 was originally released for Microsoft Windows on August 3, 2004. The game was adapted for Linux later that year, as well as being ported by Aspyr Media for Mac OS X in 2005.
![]()
Bare Feats, a popular site devoted to Mac vs PC benchmarks, to investigate what are the issues with Mac’s slower performance in Doom 3 compared to the PC. They even contacted the developers responsible for the port who explained that it indeed has to do with Mac’s architecture, gcc’s slower optimizations and the OS X itself. From the article: “ PowerPC architectural differences, including a much higher penalty for float to int conversion on the PPC. This is a penalty on all games ported to the Mac, and can’t be easily fixed.“.
The article mentions that “Add to this that the PowerPC has a higher overhead for functional calls”.Does anyone know about this? I would believe that branch-and-link is more efficient than jump-and-push (on x86), and doesn’t disrupt pipeline flow at all. So PPC should process branches and funcalls more efficiently than x86, not less. Add to this that at least the G4 has a much shorter pipeline than most x86 chips and the PPC should be much more flexible, while x86 (especially P4) is definitely optimized for straight in-line code. I would love to see what the results would be if Doom 3 was compiled using GCC 4.0 and properly optimised for the PowerPC.RE: Anonymous (IP: —.dsl.hstntx.swbell.net) – Posted on 2005-03-20 04:47:31/iThe article insist that the architecture is the problem. If you read the article it says it’s the least of the problem. That’s how technical wars start.
Please don’t grab the first thing you see and run away with it. Thanks./iCompletely agree. PowerPC is a better chip and a better platform(as in mac). The ‘PROBLEM’ is that they are porting an x86 design and x86 design ideas to PowerPC.” including a much higher penalty for float to int conversion on the PPC”x86 needs to have float to int conversions for lack of floating point registers. PowerPC has enough to avoid this conversion, but the programmers don’t want to rewrite the code so they just ‘make’ it compatible, not make it perform.gcc is NOT optimized for PowerPC. This is likely gcc’s worst platform for optimizations. The OS(OSX) should make the mac system more efficient because of better memory management and a more functional priority system allowing games to run in a higher priority that other apps.
Windows CAN do this to some degree but the unix world including the BSD Darwin under OSX are much better at this.—a properly ported game will run ever bit as fast if not faster on a powerpc mac that on a PC, lazy programers are lazy programers period.BUT in thier defence. How much time can be spent porting a game to a MUCH MUCH smaller market like the Mac, how much profit will a mac port bring in vs. The cost of porting the game and the quality of that port. PowerPC is a better chip and a better platform(as in mac). The ‘PROBLEM’ is that they are porting an x86 design and x86 design ideas to PowerPC.Better chip than what? An 8088?Better platform? Try reading the article.
There’s a performance penalty from the OSX layer handing off up the game layer from the driver as well as a performance penalty for the way that window management and opengl interact.a properly ported game will run ever bit as fast if not faster on a powerpc mac that on a PC, lazy programers are lazy programers period.Yeah, and they could also get Michael Abrash to come back to ID and optimize the shit out of the x86 some more.Nice try at being an apologist, but no dice.BUT in thier defence. How much time can be spent porting a game to a MUCH MUCH smaller market like the Mac, how much profit will a mac port bring in vs. The cost of porting the game and the quality of that port.Now you’re getting somewhere. I would love to see what the results would be if Doom 3 wascompiled using GCC 4.0 and properly optimised for thePowerPC.There are enough other variables that would still make it an uninteresting comparison with ia32+windows, unfortunately.RE: Anonymous (IP: —.dsl.hstntx.swbell.net) – Posted on2005-03-20 04:47:31The article insist that the architecture is the problem. Ifyou read the article it says it’s the least of the problem.That’s how technical wars start.
Please don’t grab thefirst thing you see and run away with it. Thanks.Completely agree.
Its more of a application architecturalissue; with that being said, alot of these problems.COULD.be fixed, but it would require them to possibly give largesparts of the code a decent overhaul.I doubt it. Most of the code should be fairly well written C.
Any assembly hotspots (eg. Perhaps SIMD vector operations) would have already been ported to the POWER code.RISC architectures tend to.really. punish programmers and compilers that produce crappy code or don’t properly exploit the features offered by the architecture (Itanium can be seen as the extreme version of RISC – hence they’re suffering the same difficulties that the earlier RISC processors had – now doubly bad as the architecture is incredibly difficult to write compilers for).No, that’s very wrong.
EPIC is completely different to RISC. If anything, they are opposites. RISC exposes a minimal ISA to the programmer, and uses hardware techniques to extract the instruction level parallelism. EPIC doesn’t do any of this in hardware, and tries to shift it all to the ISA.Now that we have got the EPIC straw man out of the way – RISC has been around for decades, and compiler technology can easily cope with it today. Gcc has been compiling RISC code for a long time.That said, gcc on POWER is probably not quite as optimal as VC on Intel (VC is probably even using an intel compiler).Then again, one wonders why they (software company) haven’t used the IBM PowerPC compiler, which would.really.
optimise itself for the architecture.Because the gain would probably be on the order of 1 percent at best.The really hot paths will be very explicity coded in C and probably asm or some explicit vector library. Many of them will be in the opengl stack and 3d drivers. Mac OS X is great for sharing load between programs, and still remaining relatively responsive. It is not great at giving everything over to one program(a full screen game).
Also, it is a given that the graphics drivers are a huge factor in the performance hit. The drivers just recently got all the functionality, but are no where near as optimized as the Windows drivers.Of course the Dual chips doesn’t give an advantage to games like it does to most anything else, which is another disadvantage for mac gaming.In a month or so, we may see Tiger and 970MP running 2.8-3Ghz. We’ll look at what improvements that brings, although the nvidia& ATI drivers in Tiger are still behind windows in optimization.
Most of the code should be fairly well written C. Any assembly hotspots (eg. OSX uses the gfx hardware accelation for almost everything it draws, but current generation graphic cards aren’t yet good enough at multitasking concurrent sessions. Therefor OSX itself is sucking performance from the GFX card before the game even gets a look in.This is why microsoft are not going to let people enable the fancy graphics in longhorn unless they have at least the next generation of graphic cards which will be designed with multitasking in mind (at microsofts behest). X800’s and 6 series cards just can’t juggle more than one task at a time. Oh nice theory how smart os x is cant steve job disable the quartreme or something when a game is runninglets just admit it.
Os x is slow. I have a powermac single 1.8ghz. Who the hell play games on os x anyway ðŸ˜x90——————–OSX uses the gfx hardware accelation for almost everything it draws, but current generation graphic cards aren’t yet good enough at multitasking concurrent sessions. Therefor OSX itself is sucking performance from the GFX card before the game even gets a look in.This is why microsoft are not going to let people enable the fancy graphics in longhorn unless they have at least the next generation of graphic cards which will be designed with multitasking in mind (at microsofts behest). X800’s and 6 series cards just can’t juggle more than one task at a time. If you read, there is an issue about conversions; why notre-write the parts so that the use the float registers ratherthan dicking around?Err because if you read, you’ll see he estimates it may be worth a% or so. Not worthwhile.Oh pulease, the number of studies out there comparing RISCto EPIC is HUGE.
You’re some how claiming that EPIC is nowa super CISC? Meaning we’d be going in the complete oppositdirection of RISC?No, it is the opposite of RISC (and today’s CISC processors) because it moves instruction ordering and memory load scheduling into the ISA rather than hardware.Come on, if it were the case, compilers and crap would be awalk in the park – the fact is, EPIC is the extreme of RISCbecause it throws even MORE responsibility back onto theprogrammer and compiler.What?
“compilers and crap would be a walk in the park”, eh? Very eloquent.You implied that RISC is hard for compilers, and that’s just crap. Yes EPIC is hard for compilers, but that has nothing to do with RISC.Which is why I raised the question; why not compile it with IBM’s PowerPC compilers?And I answered. Because it would be a very minimal gain. Do you think they had not thought of that before? EPIC is taken RISC a step further, as the instruction is expicit parallel and the compiler must take care of instruction ordering at compile time.
In fact Itanic code has a lot of NOPS just because its not always possible to run instructions in parallel. RISC compilers are more complicated than CISC compilers because one CISC operation can consist of a lot RISC operations.PowerPC is only a RISC Processor according to the IBM marketing, in fact it has more instructions than x86. So its a CISC with a few RISC features, just compare PowerPC with a real RISC. SmallStepForMan: “since Apple makes most of its money from Hardware, it’s in their interest to make the game underpreform, hence forcing Mac fanatics to open up their wallet and cough it up (upgrade).”Nah.
![]()
This is a Dual Processor G5 2.5 GHz, this is the best MAC money can buy period not only is it the best mac ever made, these people have shelled out $$$$ and bought the latest and greatest graphics hardware from ATI.Is it not clear, all the excuses, ifs and buts and denials cannot cover up the truth that the problem is likely 90% a problem with OS X Operating system architecture.It might be a trivial problem (is it solved in Tiger? If solved it would prove the value of the $150 upgrade 10.3-10.4):. The IBM G5 is a great processor Microsoft is using it in XBOX Next/360. There are no flies on the X800. EPIC is taken RISC a step further, as the instruction isexpicit parallel and the compiler must take care ofinstruction ordering at compile time.
In fact Itanic codehasNo, EPIC hasn’t taken RISC a step further. Today, RISC is about out of order execution (and yes, OOE CISC architectures have RISC like backends with fixed size instructions, load store architecture, etc). EPIC is about explicity putting instruction and memory scheduling information into the ISA.a lot of NOPS just because its not always possible to runinstructions in parallel. RISC compilers are more complicatedthan CISC compilers because one CISC operation can consist ofa lot RISC operations.This isn’t considered more complicated these days. These days, generating the code to get something done is trivial. Getting it done fast is what is hard.
High level optimisation and transformation, pipeline hazards and related, pipelining dependancies, register allocation, size/speed tradeoffs, etc are far more important.PowerPC is only a RISC Processor according to the IBMmarketing, in fact it has more instructions than x86. So itsa CISC with a few RISC features, just compare PowerPC with areal RISC.No, real RISCs these days are fixed instruction length, wide issue, pipelined, load/store, OOE architectures.The “goodness of RISC” had relatively little to do with the number of instructions in the ISA. To all those that think things are really that different. Both are post risc/cisc processors (the g5 has a hell of a lot of instructions (including altivec) for a RISC processor) and the AMD and intel chips use microcode and are actually RISC chips with instruction decoding.The G5 has a SIMD rotate instruction (hello cracking) and the p4 has a fast float to int conversion (hello fixed point performance. (note the g5 has aweful floating point performance and good SIMD performance so float to int conversions are even more important than on the p4 where you can use SIMD on 64 bit floats).If your going to post how one is way better than the other.
Real world performance and benchmarks prove it. They are similar architectures with minor differences that sometimes make a slight difference.If in doubt resort to specmark. After all who can get more out of a chip than the maker?. Hmm Why did Apple publish fake p4 specs and not publish their own independantly like everyone else. Anyway if your coding your own app check specmark performance.
If your using someone elses check online for benchmarks.Small performance differences are irrelevant on multi GIgHz machines. Please move along nothing to see here. They should have tried at least the results compiling the game with the IBM Compiler.
Even if masm (i thought he was using nasm?) was available for mac, assembly code is meant to be fast not portable, so it would be useless. One problem with powerpc cpus is, programming for altivec is quite complex. I bet they could have made doom3 running at the same speed as an comparable x86, but they would have to start nearly from scratch.they should wait 1-2 years before porting games from x86 to mac, because macs with enough cpu power would then be more widespread and thus offering more marketshare. Look at what the article states:The performance differences you see between Doom 3 Mac and Windows, especially on high end cards, is due to a lot of factors (in general order from smallest impact to largest):And of course the reason quoted is the FIRST ONE – MEANING THE SMALLEST IMPACT. And in fact that makes sense, since when they turned off Video rendering and just let the game process the gameplay without rendering anything, they got a huge boost in fps (i think around 5x as much). Meaning the CPU is not a real bottleneck for the Dual G5 system. The video card.And indeed the video card reasons are the ones that are listed last, IE MOST IMPORTANT:3.
More robust and modern OpenGL implementation on OS X. The fact that OpenGL is engineered from the ground up on OS X to be accessible from many applications at once is wonderful for the rest of the world, but does have a performance hit for games. Sharing GL with the rest of the system invokes a small overhead that Windows doesn’t have, since Windows can basically assume GL is just in use for one application.4. OpenGL framework/drivers split on OS X. On Windows, ATI and nVidia are responsible for the OpenGL code all the way from the hardware to the game. On the Mac, Apple handles the top layers of OpenGL and then hands data off to the video card drivers.
On Windows this allows the video card manufacturers to do some more direct optimizations that make sure data gets passed to the card as fast as possible. The Mac can’t short circuit that process, since there is a fairly well defined boundary between GL and the video card drivers. This is complicated by the more modern GL implementation on OS X as well- Apple can’t just put in a bunch of hacks to shove data around the wall and into the cards, just for the game.5. And the last, but definitely most important factor: Amount of time Apple/ATI/nVidia have had to optimize specifically for Doom 3. On Windows, ATI/NVIDIA spent multiple programmer years tuning their OpenGL implementations for Doom 3, starting back over a year ago while the game was still in development.
Apple/ATi/NVIDIA have done an immense amount of work on OS X’s GL in the last 3-4 months, but there is no way they could get as much done as the dozens of Windows engineers working on the problem for over a year. 10.3.8 includes a huge number of GL optimizations that make a big difference in Doom 3, and the game wouldn’t have been in any shape to ship without these. One of the biggest things ATi & nVidia do on the PC for Doom 3 is have application specific OpenGL optimizations just for the game. They can detect Doom3 is the application using GL, and even which shaders it is downloading — then they can shift to a mode that is highly optimized just for those cases. I wonder why these companies seem to be designing their games for.001 percent of the machines on the market. Do these companies get beta versions of the Next Gen graphics card? Do they design their games for the graphics cards that will be out in 2006?Seems to me they are in danger of burning their customers.I bought a Microsoft game a few years ago that ran on my new high spec Athlon laptop, at the time, ONLY in 640.480 mode.
Quite a disappointment. I never bought another Microsoft DirectX game again. The game was some motorcycle racing game.
Actually, I;ve never bought another game again. Goes to show that comparing a Apple to a Lexus/Beamer is a really flawed comparison. Yeah Apple may have a price tag that puts it in its own class – but unfortunately this is where the similarity ends. It is clear that Apple’s hardware/software (OSX) is underpowered for the requirements of Doom. I have noticed that in general Apple is not a good platform for graphics – just seems that Windows smokes Apple in this regard. I have seen the same behavior with other applications – it is so pathetic when you see OpenGL running better on 5 year old PCs than on a brand new gumdrop OSX.
It is quite surprising that the penalty for float to int is significant – there really should not be much of a performance hit as this could be done in the same clock cycle. Sigh – maybe someday Steve will just get it. Utility over style first. And of course the reason quoted is the FIRST ONE – MEANING THE SMALLEST IMPACT.
And in fact that makes sense, since when they turned off Video rendering and just let the game process the gameplay without rendering anything, they got a huge boost in fps (i think around 5x as much). Meaning the CPU is not a real bottleneck for the Dual G5 system. The video card.I have said it countless times that Doom’s stencil shadows are done on the CPU. If you know anything about Doom’s graphics you would know that the bottleneck is always the CPU1. They tested it on X800XT, which is powerfull enough to run Doom at amazing frame rates, but it is hold back by the CPU.See Anandtech’s article. I just built an Athlon64 3200 system with a 256MB X800 Pro for less than the cost of an eMac.This is precisely the reason I use a PC for gaming and MacOSX for everything else.
Other than gaming I do not use the PC for browsing or email virtually eliminating a host of security issues. The Mac handles everything else and I don’t worry about malware, spyware or viruses. Other than having SP2 and games on my PC I have no reason to run virus protection or adaware stuff.IMHO Consoles suk for gaming. Lousy graphics and slow. If you want to pile up the body count in DMs use a PC. Blizzard bought a mac development team several years ago who used to port Windows games to the Mac (if I remember correctly, they picked the team up while working on Diablo II).
So Blizzard now has a complete in-house development team, meaning the mac developers can work much closer with the other development teams throughout the stages of production and produce a much better final product on the Mac side than quick out-sourced ports can. This is also the reason every Blizzard game is now released at the same time for PC and Mac. This is the best solutions to the problem. Issues can be addressed as they happen. Not after the code is GM and shipping.
Quake3 was pretty much done the same way, as Id was the actual one doing the codebase for both (in house), unlike Doom3, which was dumped off. For this reason I can’t sit there pointing fingers at Aspyr. They did what they could with what they had, simple as that. Bottom line now it is what it is, it should get better as its optimized over time. The main problems are software/driver issues with the OS and the game itself.
You wrote:And of course the reason quoted is the FIRST ONE – MEANING THE SMALLEST IMPACT. And in fact that makes sense, since when they turned off Video rendering and just let the game process the gameplay without rendering anything, they got a huge boost in fps (i think around 5x as much). Meaning the CPU is not a real bottleneck for the Dual G5 system. The video card.I have said it countless times that Doom’s stencil shadows are done on the CPU. If you know anything about Doom’s graphics you would know that the bottleneck is always the CPU1.
They tested it on X800XT, which is powerfull enough to run Doom at amazing frame rates, but it is hold back by the CPU.Pay attention to the X800XT reference GPU. Apple’s I/O Team doesn’t write the code for this device driver. If ATI and nVidia want I/O Kit optimized drivers they either contract it to Apple or hire some competent ObjC Developers which I think will change once GCC4.1 is released with all the modifications to C/ObjC/ObjC Apple submits back into the tree. Win2k does not support DirectX well, I am sure XP would kick Linux’s and 2k’s a$$ on the same machine on the same game.As far as DirectX being slower in win2k Doom 3 is an OpenGL game, it doesn’t utilize DirectX, and by the way, it runs faster (with the latest patch) under linux than it does under windows on my hardware. And I am running WinXP SP2.Back on topic. I would think if it were programmed simultaneously on the PPC and X86, it would run quite well on the PPC.
But we can all bet that the video drivers still have probably the greatest impact on performance for this game. So Macs suck at gaming, and dual G5s at that. What else is new? The most you can get out of a Mac is somewhere sub-60 FPS, and the in particular nVidias don’t show up very well on a Mac for gaming. The work on drivers isn’t as great as for the PCs, and you’ve essentially got a game designed and built for x86 ported to another architecture. Add all that up and you’re not going to get great performance, although it might be adequate.The Xeon systems also get a good pasting by the Athlon and Opterons.
Know what you are measuring.In many instances, graphically intensive games spend the MAJORITY of their time in the graphics driver. Quake 3 spends roughly 70% of it’s time there.Now, in Doom3, it’s not quite like that, the physics, AI, sound are much more prominent, and there is a significant amount of lighting calculations done on the CPU. Even so, much of the time is spent in the graphics driver, this means we’re measuring for the most part, graphics driver performance. Drivers for non-windows platforms aren’t as good. Even Nvidia, who’s Linux driver development keeps excellent pace with its Windows, is behind. If you find your Linux box out pacing the windows box, remember you can easily reduce the number of processes running, crank up the priority of the game and strip it down further than you could with Windows.
Not to mention custom lean kernels and processes being compiled with a high degree of optimization. All this frees up memory, bandwidth and CPU time for the game which should yield significant boosts.As for the hardware, G5 has a rather strong FPU, especially compared to say the P4 — unless you bring in SSE2. Also, isn’t Altivec an integer SIMD unit (I could be all together mistaken)? If I’m right, it won’t help too much. One has to remember that the Doom3 game was created, designed and optimised for the Intel Platform.One has to remember that you are completely clueless. Doom3 was designed with machine independent algorithms.
This isn’t 1992. How much assembly code do you think is in Doom3?To get the full performance and capability of the RISC chip, the software has to be written for the RISC platform as well as to use an optimised compiler for the RISC platform.That was worse than the last one. Doom3 was written in C like all games are (or C). It’s not “written for the RISC platform”.No wonder you mac fanatics are laughed at. People like to enjoy a little mental masturbation every once in a while.Mr. Lumbergh,If writing games in C or C makes it machine independent, then why does there have to be porting at all? It should all just work with a recompile, right?The mere blatant fact that it came out six months later is a good indicator that your point about game code being equal across platforms is absolute crap.
Blizzard was able to significantly improve WoW performance on the mac with a point release. Now why would it only improve the mac version if the code was all the same? Who’s clueless now?No wonder you PC ostriches are laughed at. Take your head out of the sand!special ed class, dismissed! (can one person make a class?). The website you posted is the biggest FUD producing site i’ve ever seen, and you know it.
Whoever wrote it is more biased against apple than apple is against PC. There is a nugget of truth to everything that is said, but at the same time its all heavily biased opinion and writing style.
Take a look at real-world benchmarks on apps people actually use and you’ll see that the Top G5’s are pretty comparable with the top X86. AMD just released new proc’s, and IBM will soon release 970MP. It all depends on two things:1) at what point in the update cycle are you doing the benchmarks?2)Related to reason 1, who do you want to win. It will make you biased and thats life. Terrorists think they are going to heaven, and thats life(its also an extreme). Doom3 was designed with machine independent algorithms.Err, no.
Anyone who has a modicum of sense knows that a piece of software like a game becomes much more optimised for a platform that it was initially written on. For software such as games it is never as simple as writing in C and re-compiling because you take advantage of all the optimisations you can.However, I don’t think that is 100% the problem with Doom 3 on a Mac.
The main problem is the Mac system, how it is compiled, the OpenGL video drivers and the way OpenGL is handled by a Mac.That was worse than the last one. Doom3 was written in C like all games are (or C). It’s not “written for the RISC platform”.I’m afraid you don’t just re-compile a game written in C for another platform I’m afraid – ever. That’s just stupidity. There’s a heck of a lot of porting involved, especially with games, and no, you don’t just re-compile it. Even with a lot of established bog-standard open source software out there, porting to PPC or even to x86-64 is quite an effort before it works 100%.
I’m afraid you’re just totally clueless.However, it’s quite clear that whatever the excuses Macs are just not up to the job for gaming. Anonymous (IP: —.freedom2surf.net): I’m afraid you don’t just re-compile a game written in C for another platform I’m afraid – ever. That’s just stupidity. There’s a heck of a lot of porting involved, especially with games, and no, you don’t just re-compile it. Even with a lot of established bog-standard open source software out there, porting to PPC or even to x86-64 is quite an effort before it works 100%.
I’m afraid you’re just totally clueless.A number of programs (including games) can be simply recompiled. I have done it myself. So you can’t say it never happens. That’s nonsense.Also There’s a number of ways to write code. Some of them actually increase the ease of porting code from one platform to another.
These methods are actually quite good and have existed since before I was born. The biggest problem with these methods, is that it can be difficult to get platform dependent optimizations in them. Also, its quite possible that these established methods do not work for all programs.
(Though I’d wager they do)The biggest problems from my experience are the following: 1) The APIs are different, 2) Different platforms sometimes have different sizes for basic C types (like int), 3) Optimizations can be different and are sometimes taken into account in the design of the system, 4) Most people do not care to make the attempt to write platform independent code, 5) Most people don’t even seem to know the “established methods” which I have mentioned. If you don’t know, look them up.And yes C is a “high-level” language if you actually write code correctly, it should be either a simple recompile or require only a “small number of changes” to port the code over to another platform.This is true even of LOW-LEVEL operating system code. Did anyone else notice that these benchmarks use dissimilar machines?The fact that a mac only lagged behind a system with a better ati card by 4 fps isn’t bad? (x800 vs x850).There isn’t really any performance difference there at all, especially since it’s comparing ATIs “performance” (x800) card to their “powerhouse” (x850) card.The problem seems to lie only with the Nvidia drivers.
It’s well known that this game was written for Nvidia cards (note 9 fps increase between x850 and geFU on xeon). If the performance of the GeFU is worse than that of the ATI card on the mac, that’s seriously backwards from what it should be, and points to the Nvidia drivers directly.
Fix those and performance will go up.That would mean that the main problem has nothing whatsoever to do with the Mac, and is all on the graphics card company (as was stated at the end).That would also mean that all of you who are ranting about the comparison between the two systems are idiots, because that’s seriously the most noticeable thing about the whole article. You don’t even have to read it, it’s that obvious from the graph.All readers who didn’t see that on their own within 5 seconds of seeing the graph (i.e. Read the rest of the article instead of noticing it was a waste of time) no longer deserve their computer priveledges. Push the power button and walk away.
![]() Comments are closed.
|
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
March 2023
Categories |