John Dunleavy, owner of SQLTech Consulting in Philadelphia, PA, has been engaging in an interesting conversation with me and a few other authors on Twitter.  Denny Cherry also recapped the conversation.

I first spoke with John a few months ago when I caught him plagiarizing my work – not using it for inspiration, but simply copying it.  He posted my full articles on his blog without quoting them or showing that they were from me.  I pointed him to my FAQ on blog plagiarism, and after some strong discussions, he agreed to remove my work from his blog.  Evidence of the plagiarism still lives on in Google’s cache, unfortunately:

Google Cache for

Google Cache for

Over the last couple of days, we’ve revisited his site, and we’ve found that John has continued to copy the work of others without proper attribution.  Here’s an example:

SQLTech Consulting Article

SQLTechConsulting Article

The post has no quotes around it, and it says things like “we have achieved 99.99 percent uptime.”  The article says “by John” at the top, and the reader would assume that the “we” means John.

But every single word is copy/pasted from this Microsoft TechNet whitepaper by David Smith of ServiceU Corporation.  That whitepaper is covered by Microsoft’s copyright at the bottom, which explicitly states that:

“You may not modify, copy, distribute, transmit, display, perform, reproduce, publish, license, create derivative works from, transfer, or sell any information, software, products or services obtained from the Services.”

John chose to ignore that copyright, and he defended his actions on Twitter by saying:

John Dunleavy Quote

John Dunleavy Quote

He’d rather ask forgiveness than permission.  Unfortunately, that’s not fair to the authors.  It’s not fair to make hard working guys like me chase down people who are stealing our work, then ask them to stop.  The answer is for them to stop stealing work to begin with, but it’s tough to argue that when the other person believes they’re helping people:

John Dunleavy Quote

John Dunleavy Quote

Me, I’m not good at building operating systems, but that doesn’t give me the right to pirate Windows.  And it certainly doesn’t give me the right to share that pirated software with others, even if I’m not making money doing that sharing.  John tries to hide behind the community flag:

John Dunleavy Quote

John Dunleavy Quote

The problem with John’s noble goals, though, is that he is indeed running ads and making money.  The entire site is an advertisement for John’s consulting company, SQLTech Consulting.  If you click Services at the top of the page, he offers database administration:

SQLTech Consulting

SQLTech Consulting

It isn’t as if he’s running a personal web site – he’s running a business.  That’s especially ironic given that he asks:

SQLTech2 Quote

SQLTech2 Quote

I’d be happy to answer that question.  I help others by working my tail off to write original posts & articles, then I give them away to the community personally. I build original presentations, rehearse them over and over, and then deliver them free over the web in high definition.

I work so hard because I want people to associate me and my employer, Quest Software, with SQL Server expertise, community building, and trust.  I get paid to build a trustworthy bridge between you and Quest.  If you have a SQL Server issue, I want you to know that you can come to me personally and get an absolutely honest and correct answer.  If the answer is a script you can just download for free off SQLServerPedia, I’ll point you to that.  If the answer is somebody else’s product, I’ll tell you that.

But I line my pockets because sometimes the best answer is a Quest product, and I’ll point you to it, but I won’t sell it to you. If you ever feel like I’m shoving a product down your throat, I want you to call me out on it, because Quest wouldn’t allow that.  Billy Bosworth, the head of our database software group, talks about why that’s so important in his post How SQLServerPedia Is Different.

I would give anybody in the SQL Server community the shirt off my back.  I’ve helped my competitors, I’ve pointed people to competitors’ products, and I’ve gone out of my way to consistently do the right thing.  But that’s not enough for John Dunleavy, who wants to reuse the work of others without so much as quoting or attributing it, and he says:

SQLTech2 Quote

SQLTech2 Quote

This is the heartbreaking part about helping the community.  The vast, vast majority of the SQL Server community is made up of phenomenal people who feel the same way I do.  They drop everything to give #SQLHelp, they volunteer to share their knowledge at local user groups, and they give their work away for free on their blogs.

It’s only a tiny minority who abuse the rest of us.

Update 3/23/2010 – It Gets Worse

Upon further investigation, Denny Cherry discovered that John Dunleavy had plagiarized more material.  John stole Denny’s work for a T-SQL Tuesday blog post, changed some words, and passed it off as his own.  Now John really can’t argue that he was just publishing pointers to other peoples’ work – he was doctoring their work and publishing it without any attribution whatsoever.

If you’re a small business looking for a database consultant,
you should know how that person treats data that belongs to others.

Update 3/29/2010 – John Removed the Material

John saw the light, and he’s removed the offending material.  He’s asked me to remove this post as well, saying he never stole anyone’s work – merely used it without attribution.  I declined, but I’ve offered him the chance to write a paragraph to explain his stance here.

Brent Ozar
I make Microsoft SQL Server faster and more reliable. I love teaching, travel, and laughing.

I’m mostly a figurehead here at Brent Ozar Unlimited. My true skills are menu advice, interpretive dance, and reading Wikipedia.
Brent Ozar on sabtwitterBrent Ozar on sablinkedinBrent Ozar on sabinstagramBrent Ozar on sabgoogleBrent Ozar on sabfacebook
↑ Back to top
  1. I’ve dealt with so many people like this over the years, even people at software vendors who steal my material and post to their websites. Granted, I do license or otherwise provide content to vendor sites, but I know with which vendors I grant those licenses.

    Personally, I don’t care if someone quotes a trivial amount of a blog post, either to remind people of what the post said or to direct their readers to the full post. I see that as a type of fair use. But if sites are using full contents of my posts or articles, I’m not a happy woman.

    I do know many people feel that copyright infringement only applies if they are making cash from their theft, but they are wrong.

    I like this summary and have referred others to it:

    • Karen – wow, that’s a great link! I’ll be referring to that one in the future.

      • We include a link to the 10 Copyright Myths in our discussion group policies – and have for a long time. When we have issues with people “over posting” other people’s content in the name of “sharing”, we point people there. I think this article has a good balance of details and user-understandability.

  2. Brent,

    It’s really sad that this post was needed. But I’m really glad you decided to post it – and to not pull any punches.

    And John, if you’re reading this and honestly believe you’re not doing anything wrong let me just point out that many of the articles you’re ‘posting’ on your blog contain MORE information in them than many of the authors would be able to post on THEIR blogs. In other words, some of the stuff you’ve printed about Azure, for one example out of many, is lifted LOCK, STOCK, and BARREL from a white-paper commissioned by Microsoft through one of their partners. Yes, you’re providing a link to that document in the post, but:
    a) Brent’s absolutely right: readers are going to think you either wrote this, or that you’re CLAIMING that you wrote this,
    b) Having written for Microsoft (i.e., via partners) and for other publications, I couldn’t even copy/paste as much information as you’ve copied/pasted on to my own blog from white papers or articles that I’ve written because I’d be violating contract and copyright. In other words, you’re QUOTING more information than the authors can in many cases – because they’ve sold the rights.

    More importantly though, you’re simply not doing enough to provide proper attribution of these works.

    And, sadly, I get the impression that I’m wasting my time trying to convince you of anything else…

    • Michael – interesting, I didn’t think about the authors’ rights on those whitepapers being even smaller. That says a lot. I know when I write & present stuff for other companies, some of ’em make me sign my rights away, and you’re right – I can’t copy/paste those.

  3. Brent,

    Thanks for the post. I have no doubt that John Dunleavy will ignore it by rationalising it in his mind with some contrary argument.

    Isaac Newton famously said, ‘If I have seen further it is by standing on the shoulders of Giants’. It is not different in our industry, and providing attributions for content is inexcusable. It does not diminish one’s own abilities to admit it is based on the knowledge of others.

    Oh, and John, if you need an example of how to make sure everyone gets the credit they deserve, try this blog post to get an example of listing your resources properly, all I did was joined the dots, AND admitted it; One can expand other’s knowledge and share information without pretending that it is your own.



  4. I have suffered similar experiences in the past but (unfortunately) did not keep a record of them. Brent, I applaud you for highlighting this and shall be informing John Dunleavy of this on Twitter.


  5. Brent,

    Please take my sympahy, I really feel with you! How disgusting! If his only intention is helping the community and sharing information, what’s wrong than with mentioning the sources of his aggregated stuff?
    Realls smart people don’t steal other’s ideas, so I presume, he’s just too silly developing own useful thoughts and ideas.
    Regards and good luck for the exam,

    P.S. I really like your blog. It’s what I’d call edutaining. Keep it coming, please, and don’t let incidents like this detain you from going on!

  6. As an interesting aside, I use the free service from to track who is copying content from my website. For example, in the past 30 days, there have been 295 times that people have copied content from my website. This seems like a huge number to me, but I imagine that most of it is done for personal use. If you have a website, and haven’t tried Tynt yet, give it a try, as it is interesting to see what people are copying. In addition, when people copy content, a copyright message can be displayed when the person inserts the copy into a document, reminding them that the content does not belong to them. Of course they can delete the copyright notice, but at least they are notified.

  7. Regardless of his claims otherwise, it’s clear to me that Mr. Dunleavy is stealing in the most literal sense of the word. He is taking the work of others and presenting it as his own for his financial gain. We don’t allow car thieves to skip jail time if they offer to give the car back to its owner, so his offer to take down the material if anyone complains is disingenuous and without merit.

    Having said that, I doubt he cares what any of us thinks. The people reading his stolen material are not part of the same community and have no way of knowing any better. Unfortunately, the fleas (thieves) come with the dog (success) sometimes.

  8. I agree, there is absolutely no defense for straight copying of someone else’s work without attribution, whether it is copyrighted or not.

  9. With some luck, maybe he’ll plagiarize this article too. Please keep on fighting the good fight, I love and appreciate the sharing of knowledge

  10. Brent, yes you are doing a great and commendable job to help the community and your ire at this person is totally justified.As a loyal Quest customer for many years i have been grateful many times for the technical input i have recieved – many times nothing to do with Quest products but purely on SQL Server – from you, Kevin Kline and Ari. I have seen lots of material though that seem like ‘hmmm i have read this somewhere’, some people just cut and paste othesr are smarter, they change verbage carefully replacing words and stuff, from Books Online, from other people’s articles. And btw this is not just with articles it is with scripts also. I personally believe scripts have to be copyrighted similar and you should keep the name of the person, text on top if you choose to implement it. Sadly that is hardly the case. But keep going, these people have to be called out and credit given where it is due. For every one person who does it there are *many* like me and others on this blog who appreciate what you do.

    Kind Regards

  11. I am going to be removing one of his own posts from the most recent T-SQL Tuesday roundup I did. As far as I know it was his own post but I don’t want to encourage hits to folks who plagiarize. Especially when you have a creative commons license and have no problem with someone taking some paragraphs and linking back.

    If he truly wanted to serve the community that might read his blog but not yours (though I am not sure how many are in that category… I know none on my blog ;-P ) he would have just posted some info and a pointer to read more. You would have had no problem, people would have benefited and he would have been seen as a consultant who has no problem sharing success with others.

    This is unfortunate and becoming more prevalent. Doing it for ads is bad enough. Doing it on a blog that is supposed to showcase your expertise to potential clients is 10x worse in my book. It is a lie to his readers and a lie to potential clients who go with him because of a post “he” wrote.

  12. I’m a little shocked at the logic of Dunleavy and others. They appear to operate under the principle: If you don’t complain, I can do with your content what I wish. Whatever happened to obtaining permission *before* using someone’s material? If you don’s ask before aggregating the content of others – even if you’re not making money off the aggregation – you are still stealing their material. Why is this so hard?

  13. I’ve also been on the syndication end of John’s site. He just doesn’t get it. Nothing we say or do will help him understand. At this point I’m sure he feels like a martyr on the altar of helping people.

  14. The final quote there with the “selfish” list completely floored me. If those folks are considered as being selfish what must he think of the rest of us?

  15. Good grief – it seems that public floggings are the only resort for folks of this ilk. =^(

  16. About a year after I started blogging, I had an entire weeks worth of content “re-published” by another blogger. I read one of his posts and found it strikingly similar to what I’d written. Going back through the week it is a just a copy day by day of my content. From a authors perspective, its extremely discouraging when others take credit for your own work and get accolades for the content. Shortly after that, I ended up quitting blogging for a couple years and still harbor some bitterness towards the blogger.

  17. Wow! My 10 y/o son learned very recently the hard facts of plagiarism. He was on a team of three and one of them copied the information for their report directly from a book. They were all given a failing grade for that report. I explained to him what it means to steal from others and it was just as much his responsibility because his name was on the report. I know he learned a valuable less. Maybe I should have my son pass on what he learned?

  18. I think you showed quite a bit of restraint towards Mr. Dunleavy. I don’t have near the content, nor do I have quite the quality of your content. However, I still work hard to produce what I put out there. Thus, I realize the kind of effort needed to maintain good content and write at a high level. Stealing that effort is underhanded and pathetic. It is quite a bit more satisfying when it is your own work.
    These are the kinds of people that plagiarized your exam sheet in High School. They steal your hard work, effort and answers to get more credit for themselves.

    Give proper attribution. It is as simple as that.

  19. Pingback: SQL Server Central

  20. I do not want to act like I am defending plagiarism, because there is no excuse for it. I also understand that I made a mistake here and some earlier ones as well with the RSS feed. But I think there is a big difference between failure to use attribution and the act of plagiarism in itself. You make me out to be a criminal here. I think that’s a bit harsh and kind of hypocritical given our occupations. We are coders …and let’s not pretend we haven’t used someone else’s code without asking them before. Are you saying you never cut and pasted some code and you always attribute the original coder? Come on man. I am not an author, and I was pointing people to information to learn. The fact that WP puts “POSTED BY” and not “WRITEN BY” is not trying to pawn off the work as my own especially when there is a link clearly showing the author. It’s going to take some kind of moron to believe that it was my article if it’s a Microsoft article that gets popped up etc and the first thing they read is written by whatever author. Keep in mind I agree my methods were flawed and I agree I needed to change the articles, and I did, but you really have to relax on calling someone criminal and discounting my company and ethics for this.

    • Hi, John. You’re not letting go of this one, eh? 😉 I disagree across the board with all of your points. Based on my past interactions with you, though, I don’t believe you’ll listen to my reasoning, so I don’t want to rant and rave against you here. I caught you with your hands in the cookie jar repeatedly, and the only way I could get you to stop was to blog about it in public. It wasn’t like you listened to my emails, my tweets, my friends’ tweets, etc – this was the only way we could get you to stop. Now you want to make nice by accusing me of stealing code – I’m not even going to dignify that with a response. You’ve got a funny way of not defending plagiarism.

      I respect your right to voice your opinion, and I’m completely okay with you doing that here on my blog too. I also want to be more than fair to you – I know some folks who read this post won’t go to the extent of reading dozens of comments to find yours. I’d like to give you the opportunity to put a response at the bottom of my post. Write one up, run it past some trusted friends, and then post it here. I’ll copy it up to the bottom of the post.

      • I don’t want to argue either Brent. I just think that your post makes me out to be a criminal and I think that’s a bit harsh in my circumstance. I never said you “stole code” either Brent. I asked you if you ever cut and pasted code before without the coders’ permission first. I hate that you keep putting “stole” into context all the time.
        I appreciate your offer to raise my comment and I understand that you must be extremely frustrated in dealing with my bonehead moves, but I am just really that terrible at writing. You say so, yourself in a lot of your Blogs, that writing is SOOOO hard and it IS!!! I, like a lot of computer guys, were better in math while at school and I think that is the reason for a lot of my mistakes. I am trying to help the community, but I just need to have a little more courtesy and common sense. I have been listening to you, and I am following a lot of your advice now believe it or not. I am just a bit slow sometimes. I am also really thinking twice about if BLOGGING is really right for me. I want to help people but I keep making mistakes. Again, I’m really sorry and I hope we won’t have to have any more of these conversations. Take care.

        • What really gets me is that you claim to follow/admire/read these other blogs but apparently in all of your admiration you’ve completely ignored all of the articles written, tweets sent, and general discussion on how the community (especially one as small as this one) feels about plagiarism and the folks who perpetrate it. John, I’m 27 which more than likely makes me younger than you. Can I use that claim ignorance in stealing other people’s work? What’s worse is that your blog isn’t automatically aggregating content otherwise you’d have a situation like Brent had before where his plagiarism article showed up on the site stealing his content! That being said, you’re manually going out, copying/pasting content, and putting it on your blog with little or no attribution. That’s straight up stealing content, my friend. What you’re doing is essentially what I opened up my plagiarism post with:

          You’re not the first, and certainly, not the last person to do this and I’m sorry that you’re being lynched like this but you’re not doing yourself any favors by trying to hide behind your age, general ignorance, or whatever other excuse you have. Man up, admit your fault, remove the content and try to start again the right way. Clearly you can use the internet so looking up how to correctly cite information.

    • John –

      I posted on your blog that I look forward to you adding new, original content. I appreciated your apology, of sorts, and the fact that you were willing to make it better. I seriously do look forward to reading your points. Your response to my comment seemed to think you agreed with my analogy and point that the goal should always be to strive for the ethical and not get embroiled in the legal.

      Now I see this and I question the benefit of the doubt I was willing to give. I also question if you really agreed with my point on your blog comments. Brent explained to you what plagiarism was. Others blogged about it. Others tweeted about it…

      From the site this definition is pretty darn clear:

      “Simply put, plagiarism is the use of another’s original words or ideas as though they were your own. Any time you borrow from an original source and do not give proper credit, you have committed plagiarism and violated U.S. copyright laws. (See our What is Plagiarism? page for more detailed information on plagiarism.)”

      You claiming that it says “posted by” instead of “written by” is not a defense at all. Either you know this and are trying to carry on with a nonsense defense to make yourself look better or you really don’t understand… I’ll give you the latter (though at this point I am beginning to strongly suspect the former)…

      Brent and others have already stated this numerous times to you but I’ve always been known as one who beats dead horses… Your blog is your blog. Your picture, name, and consulting business is all over it. You own and run the blog, that is very clear. It doesn’t matter what the title of the author of the content is (Posted By, Written By, etc.), the point is – it is your site and you posted it. It is not only more than reasonable to expect people to believe that to be your content it is actually what the law states as I understand it from the above referenced site. The fact that you run your own consultancy and drive visitors to your blog with blog content makes it a little more insulting but even if you didn’t, it still isn’t right. It is illegal, unethical and dishonest to your readers. Plain and simple.

      Please, for the sake of your integrity and the sake of the SQL community, do not get stuck on the “All I did was not attribute” attitude. It is a silly point and all you are saying is “I plagiarized” but giving it a better sounding term. To repeat: Posting material from others without providing attributes IS PLAGIARISM. It isn’t some lesser degree, trivial offense, it is the offense folks were accusing you of.

      Your post where you appeared contrite and discussed a move in a better direction was right on. Perhaps you should take Brent up on his offer and write a response. Only don’t write it from the angry point of view you posted this comment from… Post it from the attitude you had a couple days ago after talking with Paul. Apologize, admit fault, talk about how you are moving in the right direction and learned a lesson and appreciate the input… If you didn’t learn that lesson and still feel the need to defend yourself, you are welcome to do so but……

    • Refactoring code is different from plagiarism. Here’s why:

      – Usually when you refactor code, you’re working for a company. When you write code for that company, it belongs to that company. Since you work for that company, you aren’t plagiarizing because you are working (with permission) with that company’s intellectual property.
      – The code has been released in a copyright agreement that allows for re-use, like with GNU or BSD. However, you must abide by the re-use agreement. And believe me, this can get you in trouble. This is why Microsoft had to release source code recently. A contracted company provided code that Microsoft used and Microsoft didn’t (at the time) realize it had taken from code that I believe had a GNU license. When it was uncovered, they were forced to release code.

      Simply put, if you aren’t using code within the bounds of the copyright / re-use agreement, you are in violation. So if you’re not familiar with these agreements, perhaps some time spent on reading up on them is a good thing to do, especially if you’re doing consulting on the side (and likely don’t have the liability insurance, etc., to cover an intellectual property dispute).

  21. Oh and the article from TSQL2SDAY, I pulled the definitions from an article on my computer from a long time ago. I thought it was something I had written but I probably never attributed that appropriately either. Another bonehead mistake.

  22. Really, John, I would give it a rest if I were you. You are tangling with many of the most well known, respected, and active people people in the SQL Server community, and there is no defense or justification for what you have been doing. According to the resume you have posted on your site, you must be in your early to mid 30’s and you have been working in the industry for over 10 years, so you cannot really claim that you “are young” or that you “did not know any better”.

    Again, if I were you, I would remove every piece of content from your site that you are not the actual, original author of. If that means you have to remove 100% of the content, so be it. Next, I would go dark for a few weeks, to let people calm down about this. Then, I would try writing some 100% original content, and try to slowly rebuild your reputation.

    That may not work, but it is a better course of action than what you are doing.

  23. Here’s the thing about plagiarism – when I went to college we had signs in every classroom defining the definition of plagiarism. Not just the English building, where I spent most of my time, but every classroom. Most of our exams carried warnings about plagiarism. It’s not a new topic and it’s not an unclear topic. Hell, when I lived in the UK they had plagiarism/fair use warnings above every photocopier in the public library.

    Saying that you didn’t know or that you’re making mistakes because you, like a log of other computer guys, were better at math in school is nothing more than garbage. It reminds me of Steve Martin’s amazing “I forgot” monologue. The entire premise is that you can get away with anything as long as you tell a judge that you forgot something was illegal.

    The reputation and careers of many once-renowned journalists, scientists, and authors have been ruined by plagiarism. It’s nothing to take lightly.

  24. Thanks Brent for giving me the chance to add my input to your post. I really appreciate it and all the help you and the others have given me thus far. I do understand now how very serious my actions were and that was why I chose to drop the articles entirely rather than reattribute them. To tell you the truth, I am not so sure Blogging is right for me and perhaps I should try and help the community in some other way. It’s not easy to take constructive criticism sometimes when you only look at things one way. And while I was only trying to help people, my inappropriate ways of posting articles were, misleading, wrong, and unappreciative of the original authors. I think by trying to defend myself, it only snowballed into a bigger mess for myself and irritated some of people in the SQL community which I respect and frequently look to answers for. I just want to say again that I am truly sorry to everyone for what I have done and I hope people can learn to forgive me. I really have learned from this a lot and I think others will too.

    • John –

      I can only speak for myself but I am sure most others would agree. I am more than willing to forgive. In fact I am excited for the chance.

      When you had your mostly apologetic post, I was there ready with a positive comment. When I saw what you wrote just 12 hours ago I saw anger, frustration and still a desire to rationalize acts. That confused me about your true intent.

      I see this post and it seems contrite and looking to move forward. If that is the case then yes, I still do hope you continue to blog when you feel ready (maybe Glenn’s advice is good.. stay away from the blog and all for a little cool down period and pick it back up and impress us with some good, original content) and I look forward to reading your posts. The more original content the merrier. The more linking back and forth the merrier. We all strive to help people and we all give up of personal time to answer questions, post blog articles, speak, tweet, etc. That’s a pretty neat community.

      So I think now the time for words is done. I won’t post anymore on this topic (though it inspired me to a Professional Development blog post in the works.. finally having more time to blog more… Not related to plagiarism but more about ownership.. you’ll see Monday/Tuesday) and I will do my best to ignore additional comments (I’m like a lion… Except just about everything looks like a good hunk of red meat to me). I want to see action now. I really hope that you just let this die down, leave your last words as a sincere apology and then re-emerge as a content blogging machine. That would really be the best outcome for everyone and I look forward to linking to one of your future posts.

  25. There’s that celebrity, everybody almost forgot about. So her manager decided it was time to adviced her:
    “Hey, *. Your picture hasn’t appeared in the yellow press for a while now. It’s time for you to show up ** in public.”
    * replace with any name of your choice
    ** replace with any appropriate phrase, like “naked”, “drunk”, “stoned”, or the like

    Last night a somewhat strange thought came into my mind, when I realized that I’ve never heard about a guy named John Dunleavy before reading your post Brent. So, I’d probably never would have come accross his web site, his company, or what ever, without reading this. And now? I bet there’s a bunch of people like me, who “met” John only because of the existance of this blog post. Well, may be he deserves, may be not.

    It’s like with the celebity mentioned at the beginning: Bad publicity is better than no publicity at all, isn’t it?
    Good for you John. You owe Brent:) Not only for guiding you in the right direction but also for making you (alomost) famous, or at least for your rise to prominence.
    Would you mind telling us the stats of your web site hits during the last two weeks compared to the month before? Ok, that wasn’t meant serious, although I confess that I would like to know…

    John, its great that you finally apologized for everything you did, hopefully also wiped out all borrowed content from your web site, and start to mention your sources from now on.

  26. Pingback: Man, I really hope this is my last post about plagiarism. - SQL Server with Mr. Denny

  27. Pingback: Cheaters never prosper - even socially « OTO One to One Interactive

  28. Pingback: This Mostly Isn’t Goodbye, Mostly | 140,000 Characters or Less

Leave a Reply

Your email address will not be published. Required fields are marked *