Buy Viagra
curlr articles » COM.CURLR.XML - A lightweight XML parser (Prev | Next)
08/28/06 - sadman

COM.CURLR.XML - A lightweight XML parser

The guiding principal behind curlr, and this web site, is to advance the use of Curl for the many web apis that are being published, particularly by Google, Yahoo and various other services. Many use XML as an exchange format and with the widespread adoption of AJAX, it is evident that XML processing is a central part of client side web applications (notwithstanding the increasing use of JSON, and Google's habit of wrapping their services in Javascript libraries).


The Curl language provides a SAX parser, and the not yet published Curl web services developer's kit builds on it to provide a stack of standards compliant XML and web services utilities - which I strongly recommend for enterprise application development.


For many applications, however, we don't need the rigor of a validating XML parser, or the type definitions of a DTD. Particularly when XML is being used only as an exchange format, we simply need a mechansim for transforming the XML data stream into structures that can be queried for the required information. The more efficient and less verbose this is, the better for the developer, for whom the XML data is simply a means to the desired end of building a useful and interesting application.


This, then, is the purpose of the code that I've implemented in the package COM.CURLR.XML - namely to provide a simple and lightweight set of classes that are easy to use in application code. The beta version of the package is now checked in to the curlr repository.


I had been wanting to implement a simple XML parser for some time - but as there's not yet a Curl implementation of lex / yacc or a general purpose scanner / parser (a project for another day), this was always going to be a handcrafted piece of code, and one I hadn't had time to write.


After some searching I found this Java Quick and Dirty XML parser, intended at the time it was written for mobile implementations but clearly suitable now for handling XML in many client applications. This is a very lightweight implementation of the basic XML standard, but the original code would be inefficient if implemented "as is" in Curl. Also, the parser is written as an event handler, with call-backs for start / end document, and start / end element events, these are also not necessary in the curlr implementation, which incrementally creates a tree structure of nodes, with a single root element.


So, the particulars differ from the original, but the principles still apply. The parser is non-validating, and does not handle the xml header - so the encoding must be known to the caller, and should be set correctly when the input stream is opened. The DOCUMENT tag is treated as a comment, but there are DOCUMENT definitions that the parser will not handle. This emphasizes the main usage constraint of the parser - that the content of the XML is expected by the parser.


There are four important classes included in the package:


In this article I'll introduce the first two classes, essential for all XML handling, and which I have used to generate and implement the Flickr api - so we can be reasonably sure that it works well enough. The other two are intended to parallel the usage of the AJAX XmlHttpRequest object; I'll present these in my next article, and show how you can implement AJAX applications with very similar Curl code.

The parser, sadXMLParser, has only one public class to be used called, unsurprisingly, parse. This takes a TextInputStream as an input argument, and returns the root node of a hierarchy on successful completion; an exception is thrown if the XML is badly formed.

The returned tree node structure is implemented by sadXMLNode, and is as simple as possible; a node has a parent (unless it's the root node), and nullable fields are assigned to the table of attributes (they are actually stored as an Arguments object), and the array of child nodes. All attributes are defined as name / value pairs with the value stored as a String.

The node class has several methods useful for searching the tree structure and for managing the tree structure. For familiarity of programming - but not compliance - I've included getters equivalent to those in the W3C level 1 spec. Here's the skeleton of the code:

The combination of the parser and the search methods of the tree nodes give us all we need to handle most application scenarios - the root node is, in effect, our XML Dom. If you're happier working with a Dom object using the standard search functions like getElementById, then you'll prefer to use sadXMLDom.

Let's look first at using the classes to examine the XML from a Flickr group's RSS feed - we'll be creating a simple RSS viewer in the next article, so this has some relevance. The following code parses the XML from an RSS feed from the Flickr Central group.

The code is quite simple - first we create a readable stream for the feed. The example chooses to do this by resolving the url into a HttpFile object. If this was unsuccessful, a MissingFileException would be thrown - so obviously the example is missing some defensive try/catch blocks. Once the file handle is obtained, we create the input stream with a call to the synchronous method http-read-open. This approach gives us access to the http response headers, and allows us to set the http request headers in the http-read-open call. If this isn't necessary, then the following even simpler code, using the read-open procedure will be sufficient to give a readable TextInputStream. In either case, the read open is where we would set the character encoding for the stream.

The parser is reentrant, so we would need only the one object for all subsequent XML processing. The parse method takes any TextInputStream as a parameter, and returns the root sadXMLNode of the parsed tree. The final statement using the to-String method will simply display the XML tree as text - minus the XML header, with an extra root node; this will be quite ugly, since the text of picture descriptions will contain HTML markup.

What next? Well, as with many applications, the XML itself is of not much use by itself, so we need to extract something that can be used or displayed. To get a list of the item titles we can write:

Which is mostly self-explanatory; search-children returns an array of sadXMLNodes, and we need to check that the return from get-child is not null - note that the content of a node is obtained from sadXMLNode.text, which will be the empty string if there is no conent.

The walk-nodes method provides a more powerful mechanism for searching the tree and building sets of nodes. It takes an anonymous procedure as input - which is applied to all nodes in the tree; when the procedure returns true, the traversal of the hierarchy is stopped. For the simple case of getting picture titles, we would use walk-nodes with a procedure as follows:

For the simple search walk-nodes provides no advantages, but it is useful for more complex searches - for example finding all nodes that have an attribute with a specified name or value.

So that's the 10 cent tour. Use the sadXMLParser and sadXMLNode classes to transform your XML into a tree of nodes, and use the node search methods to extract the data you need from the XML.

Next to come, we'll show the use of the sadXMLHttpRequest to build a simple RSS viewer.

^ TOP

Comments

Comment by milfhunter:

http://megacockcravers.chew...
http://videoseekers.chewsas...
http://her1stanal.chewsasia...
http://brownhairgirls.chews...
http://pimp4aday.chewsasian...
http://springbreakspycam.ch...
http://solosydney.chewsasia...
http://borderbangers.chewsa...
http://milkmycock.chewsasia...
http://redhairsex.chewsasia...
http://gaysolos.chewsasianb...
http://giantgaycocks.chewsa...
http://oxpass.chewsasianbea...
http://girlforgirl.chewsasi...
http://fistbang.chewsasianb...
http://sugarmamas.chewsasia...
http://seehersquirt.chewsas...
http://bigtitpatrol.chewsas...
http://footcravings.chewsas...
http://circuspenis.chewsasi...
http://ispycameltoe.chewsas...
http://momsanaladventure.ch...
http://kinkymaturesluts.che...
http://pompomporno.chewsasi...
http://perfectorgy.chewsasi...
http://all-reality-pass.che...
http://freshauditions.chews...
http://welivetogether.chews...
http://videochicks.chewsasi...
http://mrchewsasianbeaver.c...
http://xxx-proposal.chewsas...
http://hotnudegranny.chewsa...
http://streetblowjobs.chews...
http://firsttimeauditions.c...
http://trannyhunt.chewsasia...
http://suckmebitch.chewsasi...
http://bustysolos.chewsasia...
http://teenybopperclub.chew...
http://cigarettesluts.chews...
http://topshelfpussy.chewsa...
http://solobang.chewsasianb...
http://castingcouchteens.ch...
http://boobsquad.chewsasian...
http://boyforboy.chewsasian...
http://exp-mature.com/matur...
http://exp-mature.com/pure-...
http://exp-mature.com/matur...
http://exp-mature.com/class...
http://exp-mature.com/matur...
http://exp-mature.com/class...
http://exp-mature.com/matur...
http://exp-mature.com/kinky...
http://exp-mature.com/matur...
http://exp-mature.com/pure-...
http://exp-mature.com/matur...
http://exp-mature.com/web-m...
http://exp-mature.com/matur...
http://exp-mature.com/matur...
http://exp-mature.com/matur...
http://exp-mature.com/matur...
http://exp-mature.com/web-m...
http://exp-mature.com/matur...
http://exp-mature.com/kinky...
http://exp-mature.com/matur...
http://simplytranny.grannyt...
http://allbigcocks.grannyta...
http://bigbock.grannytarts....
http://oldtarts.grannytarts...
http://dudedorm.grannytarts...
http://sexspy.grannytarts.net/
http://naked-celebs-photos....
http://upskirt.grannytarts....
http://sinfultales.grannyta...
http://spy-cams.grannytarts...
http://titvision.grannytart...
http://voyeurdorm.grannytar...
http://teenshomealone.grann...
http://wetscape.grannytarts...
http://nude-celebrities.gra...
http://teenmoviezone.granny...
http://wivesexposed.grannyt...
http://teenteenteen.grannyt...
http://mrskin.grannytarts.net/
http://mrskin-members.grann...
http://upskirts.grannytarts...
http://spycams.grannytarts....
http://simplygay.grannytart...
http://mr-skin.grannytarts....
http://grannyfucking.granny...
http://outdoorbackdoor.kiss...
http://patriciasplace.kissl...
http://limopatrol.kisslesbi...
http://hotcampusteens.kissl...
http://pornweek.kisslesbian...
http://neighboraffair.kissl...
http://latinacaliente.kissl...
http://heelsandhoes.kissles...
http://ukroadtrips.kisslesb...
http://slutseeker.kisslesbi...
http://heavenlyknockers.kis...
http://virginteenlesbians.k...
http://brandibelle.kisslesb...
http://summertimemilf.kissl...
http://hot-campus-teens.kis...
http://oldfartsyoungtarts.k...
http://orgy-sex-parties.kis...
http://bigtitbangers.kissle...
http://teensfromtokyo.kissl...
http://orgysexparties.kissl...
http://rightofftheboat.kiss...
http://retroraw.kisslesbian...
http://roundmoundofass.kiss...
http://mrbigdickshotchicks....
http://asian1on1.kisslesbia...

Comment by milfhunter:

http://livebimbos.to-spy.com
http://live-bimbos.to-spy.com
http://lolitateen.to-spy.com
http://lolita-teen.to-spy.com
http://malenextdoor.to-spy.com
http://male-next-door.to-sp...
http://maximumcock.to-spy.com
http://maximum-cock.to-spy.com
http://melonmarket.to-spy.com
http://melon-market.to-spy.com
http://meninthenude.to-spy.com
http://men-in-the-nude.to-s...
http://milfblowout.to-spy.com
http://milf-blowout.to-spy.com
http://mombang.to-spy.com
http://mom-bang.to-spy.com
http://mrskin.to-spy.com
http://mr-skin.to-spy.com
http://newandinnocent.to-sp...
http://new-and-innocent.to-...
http://oldtarts.to-spy.com
http://old-tarts.to-spy.com
http://orgyblowout.to-spy.com
http://orgy-blowout.to-spy.com
http://orgyfrenzy.to-spy.com
http://orgy-frenzy.to-spy.com
http://orgyparty.to-spy.com
http://orgy-party.to-spy.com
http://pantysquad.to-spy.com
http://panty-squad.to-spy.com
http://petiteland.to-spy.com
http://petite-land.to-spy.com
http://phuck-fu-masters.to-...
http://phuckfumasterz.to-sp...
http://plainsluts.to-spy.com
http://plain-sluts.to-spy.com
http://playersxxx.to-spy.com
http://players-xxx.to-spy.com
http://pornbuster.to-spy.com
http://porn-buster.to-spy.com
http://pornstarbang.to-spy.com
http://porn-star-bang.to-sp...
http://pornstarblowout.to-s...
http://porn-star-blowout.to...
http://racialbang.to-spy.com
http://racial-bang.to-spy.com
http://realhardcore.to-spy.com
http://real-hardcore.to-spy...
http://realmelons.to-spy.com
http://real-melons.to-spy.com
http://realtimevideos.to-sp...
http://real-time-videos.to-...
http://sexspy.to-spy.com
http://sex-spy.to-spy.com
http://shavedangels.to-spy.com
http://shaved-angels.to-spy...
http://shelovesbigballs.to-...
http://she-loves-big-balls....
http://siliconefantasy.to-s...
http://silicone-fantasy.to-...
http://sinfultales.to-spy.com
http://sinful-tales.to-spy.com
http://slaveisland.to-spy.com
http://slave-island.to-spy.com
http://spycams.to-spy.com
http://spy-cams.to-spy.com
http://studbang.to-spy.com
http://stud-bang.to-spy.com
http://sweetblack.to-spy.com
http://sweet-black.to-spy.com
http://sweetyoungboys.to-sp...
http://sweety-oung-boys.to-...
http://teenmoviezone.to-spy...
http://teen-movie-zone.to-s...
http://titvision.to-spy.com
http://tit-vision.to-spy.com
http://tokyofuckfest.to-spy...
http://tokyo-fuck-fest.to-s...
http://ultimatestud.to-spy.com
http://ultimate-stud.to-spy...
http://virginsparty.to-spy.com
http://virgins-party.to-spy...
http://webmature.to-spy.com
http://web-mature.to-spy.com
http://webyoung.to-spy.com
http://web-young.to-spy.com
http://wetscape.to-spy.com
http://wet-scape.to-spy.com
http://whipsandwomen.to-spy...
http://whips-and-women.to-s...
http://wivesexposed.to-spy.com
http://wives-exposed.to-spy...
http://xtremevoyeur.to-spy.com
http://xtreme-voyeur.to-spy...
http://xxxmovieblowout.to-s...
http://xxxmovie-blowout.to-...
http://xxx-movie-blowout.to...
http://youngamateurs.to-spy...
http://young-amateurs.to-sp...
http://younglatina.to-spy.com
http://young-latina.to-spy.com
http://zeina-hart-brunob.to...
http://seekermilf.info/
http://seekermilf.info/milf...
http://seekermilf.info/milf...
http://herfirstlesbiansex-r...
http://herfirstlesbiansex-r...
http://herfirstlesbiansex-r...
http://mrchewsasianbeaver-r...
http://mrchewsasianbeaver-r...
http://mrchewsasianbeaver-r...
http://myfirstsexteacher-re...
http://myfirstsexteacher-re...
http://myfirstsexteacher-re...

Comment by milfhunter:

http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.com/...
http://www.bangbros-review....
http://www.bangbros-review....
http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.com/...
http://www.bangbros-review....
http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.com/...
http://bangbros-review.info...
http://bangbros-review.info...
http://bangbros-review.info...
http://bangbros-review.info...
http://bangbros-review.info...
http://bangbros-review.info...
http://bangbros-review.info...
http://bangbros-review.info...
http://bangbros-review.info...
http://bangbros-review.info...
http://bangbros-review.info...
http://bangbros-review.info...
http://bangbros-review.info...
http://anal-sex-lessons.ama...
http://her-1st-anal.amazing...
http://big-ass-adventure.am...
http://her-first-anal-sex.a...
http://ass-parade.amazingan...
http://tight-anal-sluts.ama...
http://anal-town.amazingana...
http://outdoor-backdoor.ama...
http://right-off-the-boat.a...
http://ass-breakers.amazing...
http://anal-cravings.amazin...
http://cherry-potter.amazin...
http://anal-hell.amazingana...
http://anal-valley.amazinga...
http://hottest-anal-sex.ama...
http://amazing-anal.amazing...
http://anal-seduction.amazi...
http://anal-movie-matrix.am...
http://love-below-the-belt....
http://ass-master-piece.ama...

http://foot-erotica.aboutfe...
http://foot-cravings.aboutf...
http://uniform-ladies.about...
http://taboo-insertions.abo...
http://fucking-machines.abo...
http://whipped-ass.aboutfet...
http://fetish-hell.aboutfet...
http://secret-fetishes.abou...
http://panties-and-fannies....
http://wet-scape.aboutfetis...
http://see-her-squirt.about...
http://hog-tied.aboutfetish...
http://her-first-dp.net/
http://her-first-dp.net/her...
http://her-first-dp.net/her...
http://littleapril-review.com/
http://littleapril-review.c...
http://littleapril-review.c...
http://iteens2.com/
http://iteens2.com/iteens.html
http://iteens2.com/i-teens....
http://hornyspanishflies-re...
http://hornyspanishflies-re...
http://hornyspanishflies-re...
http://bare-foot-maniac.com/
http://bare-foot-maniac.com...
http://bare-foot-maniac.com...
http://big-tit-patrol.info/
http://big-tit-patrol.info/...
http://big-tit-patrol.info/...
http://ispycameltoe-review....
http://ispycameltoe-review....
http://ispycameltoe-review....
http://mysisterhotfriend.info/
http://mysisterhotfriend.in...
http://mysisterhotfriend.in...
http://mysisterhotfriend.in...
http://coupleseduceteen.net/
http://coupleseduceteen.net...
http://coupleseduceteen.net...
http://coupleseduceteen.net...
http://milf-lesson.org/
http://milf-lesson.org/milf...
http://milf-lesson.org/milf...
http://milf-lesson.org/milf...

Comment by milfhunter:

http://teenhitchhikers-revi...
http://teenhitchhikers-revi...
http://teenhitchhikers-revi...
http://teenhitchhikers-revi...
http://teenhitchhikers-revi...
http://teenhitchhikers-revi...
http://teenhitchhikers-revi...
http://teenhitchhikers-revi...
http://sex-teen-story.com/w...
http://sex-teen-story.com/t...
http://sex-teen-story.com/s...
http://sex-teen-story.com/s...
http://sex-teen-story.com/s...
http://sex-teen-story.com/t...
http://roundandbrown-review...
http://roundandbrown-review...
http://roundandbrown-review...
http://roundandbrown-review...
http://roundandbrown-review...
http://hothaley.reality-ass...
http://vanillateensblackcre...
http://hisfirstthreesome.re...
http://tinysblackadventures...
http://cockgayhugemilk.real...
http://ebonyjoy.oursamples....
http://bigtitsroundasses.ou...
http://allgangbang.oursampl...
http://analvalley.oursample...
http://gayvideosxxx.oursamp...
http://myfriendshotmom-revi...
http://myfirstsexteacher-re...
http://myfirstsexteacher-re...
http://myfirstsexteacher-re...
http://myfirstsexteacher-re...
http://myfirstsexteacher-re...
http://myfirstsexteacher-re...
http://gayinterracialxxx.mr...
http://gayvideosxxx.mr-gay....
http://gaydome.mr-gay.net/
http://gay-super-cocks.mr-g...
http://diary-of-a-milf.milf...
http://hot-milf.milfterm.com/
http://milf-lessons.milfter...
http://milf-term.milfterm.com/
http://milf-next-door.milft...
http://sexspy.milfjoin.com/
http://club-seventeen.milfj...
http://blackcockswhitesluts...
http://bangbus-video.milfjo...
http://my-sisters-hot-frien...
http://milfhunter-review.co...
http://milfhunter-review.co...
http://milfhunter-review.co...
http://milfhunter-review.co...
http://www.milfhunter-revie...
http://milfhunter-2.com/mil...
http://milfhunter-2.com/mil...
http://milfhunter-2.com/mil...
http://milfhunter-2.com/mil...
http://milfhunter-2.com/fel...
http://milfcruiser-review.com/
http://milfcruiser-review.c...
http://milfcruiser-review.c...
http://milfcruiser-review.c...
http://milfcruiser-review.c...
http://mikesapartment-revie...
http://mikesapartment-revie...
http://mikesapartment-revie...
http://mikesapartment-revie...
http://mikesapartment-revie...
http://mikeinbrazil-review....
http://mikeinbrazil-review....
http://mikeinbrazil-review....
http://mikeinbrazil-review....
http://mikeinbrazil-review....
http://megacockcravers-revi...
http://megacockcravers-revi...
http://megacockcravers-revi...
http://8thstreetlatinas.llo...
http://girlhuntinggirl.llow...
http://mrchewasianbeaver.ll...
http://seehersquirt.llow.net/
http://myfirstsexteacher-mo...
http://littleapril-review.c...
http://littleapril-review.c...
http://littleapril-review.c...
http://herfirstlesbiansex-r...
http://herfirstlesbiansex-r...
http://herfirstlesbiansex-r...
http://mrchewsasianbeaver-r...
http://mrchewsasianbeaver-r...
http://mrchewsasianbeaver-r...
http://myfriendshotmom-revi...
http://myfriendshotmom-revi...
http://her-first-dp.net/
http://her-first-dp.net/her...
http://her-first-dp.net/her...
http://iteens2.com/iteens.html
http://hornyspanishflies-re...
http://hornyspanishflies-re...

Comment by Patient info site:

Sometimes it happens that for the same ailment different treatments are offered by different doctors. This confuses the patients to a great deal. Which treatment to go for, which doctor to follow etc, etc. Under these circumstances people can refer to the http://www.buy-viagra-with-... patient info sites where they can get all the information regarding the disease, its treatments, prices etc.

Comment by online pharmacy medicines:

A Brand-name drug is marketed under a specific trade name of a pharmaceutical manufacturer. In most cases, Brand-name drugs are still under patent protection, or the manufacturer is the only source for the product, but also in many countries throughout the world that is not the case and a generic alternative is easily available. A generic drug is made with the same active ingredients in the same dosage form as a brand name drug. The drug is therapeutically equivalent generic drug brand, but is sold under its chemical or "generic" name. - http://www.rxwanted.com

Propecia is used by some balding men to stimulate hair growth. If hair growth is going to occur with the use of finasteride, it usually occurs after the medicine has been used for about 3 months and lasts only as long as the medicine continues to be used. - Discount generic propecia pills http://www.rxwanted.com/gen...

Cialis, Generic Cialis, Tadalafil relaxes muscles within the penis and allows increased blood flow into the penis, necessary to achieve and maintain an erection. Cialis, Generic Cialis, Tadalafil is used to treat erectile dysfunction (impotence). - Discount generic cialis tadalafil http://www.rxwanted.com/tad...

Zoloft, Generic Zoloft, Sertraline HCL is used to treat depression, obsessive-compulsive disorder, panic disorder, posttraumatic stress disorder (PTSD), premenstrual dysphoric disorder (PMDD), and social anxiety disorder, also known as social phobia. - Discount generic Zoloft Sertraline pills http://www.rxwanted.com/ser...

Wellbutrin, Generic Wellbutrin, Bupropion Hydrochloride is used to relieve symptoms of depression such as feelings of sadness, worthlessness or guilt, loss of interest in daily activities, changes in appetite, tiredness, sleeping too much, insomnia, and thoughts of death or suicide. - Discount Generic Wellbutrin Bupropion http://www.rxwanted.com/bup...

Zantac, Generic Zantac, Ranitidine is also used to treat conditions in which the stomach produces too much acid and conditions in which acid comes up into the esophagus and causes heartburn, such as gastroesophageal reflux disease (GERD). - Discount generic zantac ranitidine http://www.rxwanted.com/ran...

In men with very enlarged prostates and mild to moderate symptoms (difficulty urinating, decreased flow of urination, hesitation at the beginning of urination, getting up at night to urinate), finasteride may decrease the severity of symptoms. Finasteride may also reduce the chance that surgery on the prostate will be needed. - discount generic propecia finasteride http://www.rxwanted.com/fin...

Celebrex, Generic Celebrex, Celecoxib works by reducing substances that cause inflammation, pain, and fever in the body. Celebrex, Generic Celebrex, Celecoxib is used to reduce pain, inflammation, and stiffness caused by osteoarthritis and rheumatoid arthritis and also used to reduce the number of adenomatous colorectal polyps in familial adenomatous polyposis (FAP), to treat acute pain, and to treat pain associated with menstruation. - discount generic celebrex celecoxib http://www.rxwanted.com/cel...

Retin-A, Generic Retin-A, Tretinoin helps the skin to renew itself more quickly and therefore reduces pimple and blackhead formation, and may improve the appearance and texture of skin. The Retin-A, Generic Retin-A, Tretinoin are used to treat acne. - discount generic Retin-A tretinoin http://www.rxwanted.com/gen...

Cialis, Generic Cialis, Tadalafil relaxes muscles within the penis and allows increased blood flow into the penis, necessary to achieve and maintain an erection. Cialis, Generic Cialis, Tadalafil is used to treat erectile dysfunction (impotence). - discount generic cialis pills http://www.rxwanted.com/cia...

Viagra (Generic Viagra, Sildenafil Citrate) relaxes muscles within the penis and allows increased blood flow into the penis, necessary to achieve and maintain an erection. Viagra (Generic Viagra, Sildenafil Citrate) is used to treat erectile dysfunction (impotence). - discount generic viagra pills http://www.rxwanted.com/gen...

Comment by Nupfoutsunush:

Yesterday visited the site did not work, and very urgent need to (((

Add Comment

:

:
: