XML-SAX-ExpatXS-1.33/000755 000765 000024 00000000000 12042437703 015206 5ustar00pcimprichstaff000000 000000 XML-SAX-ExpatXS-1.33/Changes000644 000765 000024 00000015075 12042437325 016511 0ustar00pcimprichstaff000000 000000 Revision history for Perl extension XML::SAX::ExpatXS ===================================================== 1.33 Oct 26, 2012 - LICENSE field added to ExpatXS.pm - [rt.cpan.org #69253] t/f08noexpand.t is missing in distro () 1.32 Apr 12, 2011 - NoExpand option test added - type warnings fixed (gcc 4.4) 1.31 July 3, 2007 - Security fix: namespace separator in XML_ParserCreate_MM changed from '}' to -1, related to SF.net bug 1742315 [suggested by Bjoern Hoehrmann] 1.30 July 2, 2007 - speed optimizations - main callback functions (start_element, end_element, characters, comment) resolved in advance using XML::SAX::ExpatXS::Preload module - feature 'http://xmlns.perl.org/sax/recstring' controls whether a recognized string is available as {RecognizedString} among {ParseOptions} (not by default as this is rather expensive). - added {ExpatVersion} property 1.20 April 7, 2006 - speed optimizations - data structures reused: start_element() hash reused by end_element() call when free, characters() hash recycled when free - better error message when parse_uri fails 1.10 November 10, 2005 - fixed start_entity() called for an external DTD subset if parameter entity parsing is in effect (ParseParamEnt option setting XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE in Expat) [using patches by Axel Eckenberger] - resolve_entity() can return source with {String} now - feature 'http://xml.org/sax/features/external-general-entities' controls processing of external general entities - feature 'http://xml.org/sax/features/external-parameter-entities' controls processing of external parameter entities (the same as ParseParamEnt option) - skipped_entity() implemented [based on patch and tests by Axel Eckenberger] - fixed segfault for unparsed entities without PublicId [using patches by Axel Eckenberger] - fixed leaks in entity callbacks 1.09 October 14, 2005 - {Source}{Encoding} is used (with higher priority than encoding specified in the XML declaration) - fixed segfaults for undefined {Source} properties - Expat localization improved in Makefile.PL - localized setting of $/ in _get_external_entity 1.08 April 22, 2005 - feature 'http://xmlns.perl.org/sax/xmlns-uris' puts xmlns:* attributes into the 'http://www.w3.org/2000/xmlns/' namespace and xmlns attributes into no namespace. The 'http://xml.org/sax/features/xmlns-uris' applies only if the new one is off. The default behavior is the same as for other Perl SAX parsers now. - fixed repeated parsing with Perl 5.6 1.07 March 16, 2005 - feature 'http://xml.org/sax/features/xmlns-uris' puts xmlns and xmlns:* attributes into no or the 'http://www.w3.org/2000/xmlns/' namespace. Default is no namespace (feature not set) which is a behavior different from previous versions! - feature 'http://xmlns.perl.org/sax/version-2.1' is set (and can't be turned off) - minor fix in memory management [reported by Rob Bloodgood] 1.06 March 7, 2005 - more changes in memory management; parse_* run in loops without leaks [reported by Rob Bloodgood] 1.05 February 18, 2005 - fixed segfault after deleting a key of Features [patch by Pavel Hlavnicka] 1.04 December 15, 2004 - fixed the bug of SystemId/PublicId of external DTD subset provided instead of identifiers of the current entity in Locator and Exception [reported by Bjoern Hoehrmann] - recognized string made available as $p->{ParseOptions}{RecognizedString} - ParserOptions renamed to ParseOptions to match XML::SAX::Base - minor fixes for make test - test suite extended 1.03 November 23, 2004 - minor fixes for make test 1.02 November 22, 2004 - document locator redesigned to fit Perl SAX 2.1 specs - feature 'http://xmlns.perl.org/sax/locator' can turn the document locator off - test suite extended 1.01 September 24, 2004 - memory management check completed, no more leaks detected 1.00 July 16, 2004 - relevant memory leaks fixed - some more XS code cleanup 0.99 June 7, 2004 - element_decl (Name, Model) completed - attribute_decl (eName, aName, Type, Mode, Value) completed - ns declaration attributes are treated as common attributes when the 'http://xmlns.perl.org/sax/ns-attributes' feature is set to 1 (default) - fixed the bug of "0" translated into "" [patch by Sam Tregar] - fixed a reference counting bug in startElement [reported by Sam Tregar] - test suite extended 0.98 April 9, 2004 - added support for more encodings. In addition to built-in Expat encodings (UTF-8, UTF-16, ISO-8859-1, US-ASCII) we now support ISO-8859-2,3,4,5,7,8,9, WIN-1250,1252, BIG5, EUC-KR, EUC-JP and Shift JIS. (adapted from XML::Parser) - cleaning the code to satisfy gcc2 and ANSI C [suggested by Sergey Skvortsov] - minor bug fixes (locator, test suite) 0.97 March 29, 2004 - external parsed entities parsed - external_entity_decl (Name, PublicId, SystemId) called for external entity declarations - internal_entity_decl (Name, Value) called for external entity declarations - start_entity (Name), end_entity (Name) called for external entity references - resolve_entity callback implemented - get_feature(), set_feature(), get_features() API functions implemented - feature 'http://xmlns.perl.org/sax/join-character-data' controls character data fragmentation, 0/1 (1 being default) - performance optimizations - fixed the xmlns="" segmentation fault - test suite extended 0.96 February 19, 2004 - exceptions (Message, Exception, LineNumber, ColumnNumber, PublicId, SystemId) sent to ErrorHandler - document locator (LineNumber, ColumnNumber, PublicId, SystemId, Encoding, XMLVersion) implemented (updated on start_element, end_element, characters, start_prefix_mapping, end_prefix_mapping, processing-instruction) - test suite extended 0.95 February 5, 2004 - renamed to XML::SAX::ExpatXS - completed parsing of xml declarations - completed start_dtd, end_dtd - fixed a bug of Attributes hash keys - fixed an "Attempt to free unreferenced scalar during global destruction" bug when parsing repeatedly - test suite extended 0.90_01 May 13, 2002 - initial release by Matt Sergeant (a working parser). XML-SAX-ExpatXS-1.33/encoding.h000644 000765 000024 00000006160 11254652014 017146 0ustar00pcimprichstaff000000 000000 /***************************************************************** ** encoding.h ** ** Copyright 1998 Clark Cooper ** All rights reserved. ** ** This program is free software; you can redistribute it and/or ** modify it under the same terms as Perl itself. */ #ifndef ENCODING_H #define ENCODING_H 1 #define ENCMAP_MAGIC 0xfeebface typedef struct prefixmap { unsigned char min; unsigned char len; /* 0 => 256 */ unsigned short bmap_start; unsigned char ispfx[32]; unsigned char ischar[32]; } PrefixMap; typedef struct encinf { unsigned short prefixes_size; unsigned short bytemap_size; int firstmap[256]; PrefixMap *prefixes; unsigned short *bytemap; } Encinfo; typedef struct encmaphdr { unsigned int magic; char name[40]; unsigned short pfsize; unsigned short bmsize; int map[256]; } Encmap_Header; /*================================================================ ** Structure of Encoding map binary encoding ** ** Note that all shorts and ints are in network order, ** so when packing or unpacking with perl, use 'n' and 'N' respectively. ** In C, use the htonl family of functions. ** ** The basic structure is: ** ** _______________________ ** |Header (including map expat needs for 1st byte) ** |PrefixMap * pfsize ** | This section isn't included for single-byte encodings. ** | For multiple byte encodings, when a byte represents a prefix ** | then it indexes into this vector instead of mapping to a ** | Unicode character. The PrefixMap type is declared above. The ** | ispfx and ischar fields are bitvectors indicating whether ** | the byte being mapped is a prefix or character respectively. ** | If neither is set, then the character is not mapped to Unicode. ** | ** | The min field is the 1st byte mapped for this prefix; the ** | len field is the number of bytes mapped; and bmap_start is ** | the starting index of the map for this prefix in the overall ** | map (next section). ** |unsigned short * bmsize ** | This section also is omitted for single-byte encodings. ** | Each short is either a Unicode scalar or an index into the ** | PrefixMap vector. ** ** The header for these files is declared above as the Encmap_Header type. ** The magic field is a magic number which should match the ENCMAP_MAGIC ** macro above. The next 40 bytes stores IANA registered name for the ** encoding. The pfsize field holds the number of PrefixMaps, which should ** be zero for single byte encodings. The bmsize field holds the number of ** shorts used for the overall map. ** ** The map field contains either the Unicode scalar encoded by the 1st byte ** or -n where n is the number of bytes that such a 1st byte implies (Expat ** requires that the number of bytes to encode a character is indicated by ** the 1st byte) or -1 if the byte doesn't map to any Unicode character. ** ** If the encoding is a multiple byte encoding, then there will be PrefixMap ** and character map sections. The 1st PrefixMap (index 0), covers a range ** of bytes that includes all 1st byte prefixes. ** ** Look at convert_to_unicode in Expat.xs to see how this data structure ** is used. */ #endif /* ndef ENCODING_H */ XML-SAX-ExpatXS-1.33/ExpatXS.xs000755 000765 000024 00000145224 11536152470 017133 0ustar00pcimprichstaff000000 000000 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /***************************************************************** ** ExpatXS.xs ** ** This file is derived from the original Expat.xs file written ** for XML::Parser by Larry Wall and Clark Cooper. ** ** The file has been modified for purposes of XML::SAX::ExpatXS ** by Matt Sergeant and Petr Cimprich. ** ** Copyright 1998-2007 by authors of respective parts. ** All rights reserved. ** ** This program is free software; you can redistribute it and/or ** modify it under the same terms as Perl itself. ** */ #include #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #undef convert #include "patchlevel.h" #include "encoding.h" #include /* Version 5.005_5x (Development version for 5.006) doesn't like sv_... anymore, but 5.004 doesn't know about PL_sv.. Don't want to push up required version just for this. */ #if PATCHLEVEL < 5 #define PL_sv_undef sv_undef #define PL_sv_no sv_no #define PL_sv_yes sv_yes #define PL_na na #endif #define BUFSIZE 32768 #define NSDELIM -1 typedef struct { SV* self_sv; XML_Parser p; AV* context; AV *ns_stack; int skip_until; int feat_join; int feat_nsatts; int feat_locator; int feat_recstring; int feat_xmlns; int feat_perlxmlns; int feat_entgen; int feat_entpar; SV *recstring; char * delim; STRLEN delimlen; unsigned ns:1; unsigned no_expand:1; /* Callback handlers */ SV* start_sv; SV* end_sv; SV* char_sv; SV* comment_sv; HV* atts; int atts_ready; HV* locator_hv; HV* extern_hv; SV* chrbuffer; HV* chr_hv; } CallbackVector; static HV* EncodingTable = NULL; static XML_Char nsdelim[] = {NSDELIM, '\0'}; static char *QuantChar[] = {"", "?", "*", "+"}; static U32 PrefixHash; /* pre-computed */ static U32 NamespaceURIHash; static U32 NameHash; static U32 LocalNameHash; static U32 AttributesHash; static U32 ValueHash; static U32 DataHash; static U32 TargetHash; static U32 VersionHash; static U32 XMLVersionHash; static U32 EncodingHash; static U32 PublicIdHash; static U32 SystemIdHash; static SV *empty_sv; /* These are few macros used within C functions */ /* Macro to generate external entity name key */ #define xse_extern_ent_key(key, base, sysid, pubid) \ key = strncat(strncat(strncpy(key, base ? base : "", 299), \ sysid ? sysid : "", 299), pubid ? pubid : "", 299); /* Macro to emit characters */ #define xse_characters(userData, buffer) \ if (SvCUR(buffer) > 0) {\ sendCharacterData(userData, buffer);\ sv_setpv(buffer, "");\ } /* Macro to determine current end position */ #define xse_get_end_position(p, ln, cl, string, len) \ ln = XML_GetCurrentLineNumber(p); \ cl = XML_GetCurrentColumnNumber(p); \ for (i = 0; i < len; i++) { \ if (string[i] < 0xffffff80 || string[i] > 0xffffffbf) cl++; \ if (string[i] == '\n') {if (i < len - 1) {ln++; cl=0;}} \ }; /* Forward declarations */ #if PATCHLEVEL < 5 && SUBVERSION < 5 /* ================================================================ ** This is needed where the length is explicitly given. The expat ** library may sometimes give us zero-length strings. Perl's newSVpv ** interprets a zero length as a directive to do a strlen. This ** function is used when we want to force length to mean length, even ** if zero. */ static SV * newSVpvn(char *s, STRLEN len) { register SV *sv; sv = newSV(0); sv_setpvn(sv, s, len); return sv; } /* End newSVpvn */ #define ERRSV GvSV(errgv) #endif #ifdef SvUTF8_on static SV * newUTF8SVpv(char *s, STRLEN len) { register SV *sv; sv = newSVpv(s, len); SvUTF8_on(sv); return sv; } /* End new UTF8SVpv */ static SV * newUTF8SVpvn(char *s, STRLEN len) { register SV *sv; sv = newSV(0); sv_setpvn(sv, s, len); SvUTF8_on(sv); return sv; } #else /* SvUTF8_on not defined */ #define newUTF8SVpv newSVpv #define newUTF8SVpvn newSVpvn #define SvUTF8_on(a) (a) #endif static void* mymalloc(size_t size) { #ifndef LEAKTEST return safemalloc(size); #else return safexmalloc(328,size); #endif } static void* myrealloc(void *p, size_t s) { #ifndef LEAKTEST return saferealloc(p, s); #else return safexrealloc(p, s); #endif } static void myfree(void *p) { Safefree(p); } static XML_Memory_Handling_Suite ms = {mymalloc, myrealloc, myfree}; static int get_feature(CallbackVector *cbv, char *fname) { SV ** aux = hv_fetch((HV*)SvRV(cbv->self_sv), "Features", 8, 0); if (! aux) { return 0; } else { aux = hv_fetch((HV*)SvRV(*aux), fname, strlen(fname), 0); if (! aux) { return 0; } else { return SvIV(*aux); } } } static HV* add_ns_mapping(AV *ns_stack, char *prefix, char *uri) { HV *ret; SV *sv_prefix, *sv_uri; AV *new_entry; /* warn("add_ns_mapping(%s => %s)\n", prefix, uri); */ sv_prefix = (prefix == NULL) ? SvREFCNT_inc(empty_sv) : newUTF8SVpv(prefix, strlen(prefix)); sv_uri = (uri == NULL) ? SvREFCNT_inc(empty_sv) : newUTF8SVpv(uri, strlen(uri)); ret = newHV(); hv_store(ret, "Prefix", 6, sv_prefix, PrefixHash); hv_store(ret, "NamespaceURI", 12, sv_uri, NamespaceURIHash); new_entry = newAV(); av_push(new_entry, newSVsv(sv_prefix)); av_push(new_entry, newSVsv(sv_uri)); /* store at front of array for faster access */ av_unshift(ns_stack, 1); av_store(ns_stack, 0, newRV_noinc((SV*)new_entry)); return ret; } static void del_ns_mapping(AV *ns_stack, char *prefix) { SV *entry; I32 key = 0; /* warn("del_ns_mapping: %s\n", prefix); */ entry = av_shift(ns_stack); if (entry) SvREFCNT_dec(entry); } static AV* get_ns_mapping(AV *ns_stack, char *prefix, char *uri) { SV **entry; I32 key = 0; for (key = 0; key <= av_len(ns_stack); key++) { entry = av_fetch(ns_stack, key, 0); if (entry && *entry && SvOK(*entry)) { SV **svthing = av_fetch((AV*)SvRV(*entry), prefix == NULL ? 1 : 0, 0); if (svthing && *svthing && (strcmp(SvPV(*svthing, PL_na), prefix == NULL ? uri : prefix) == 0)) { return (AV*)SvRV(*entry); } } } return NULL; } static void append_error(XML_Parser parser, char * err) { dSP; CallbackVector * cbv; HV * exc = newHV(); SV **public; SV **system; char *msg; cbv = (CallbackVector*) XML_GetUserData(parser); if (! err) err = (char *) XML_ErrorString(XML_GetErrorCode(parser)); msg = (char *)mymalloc(strlen(err) + 50); sprintf(msg, "%s at line %d, column %d, byte %d", err, (int)XML_GetCurrentLineNumber(parser), (int)XML_GetCurrentColumnNumber(parser)+1, (int)XML_GetCurrentByteIndex(parser)); public = hv_fetch(cbv->locator_hv, "PublicId", 8, 0); system = hv_fetch(cbv->locator_hv, "SystemId", 8, 0); hv_store(exc, "PublicId", 8, public ? *public : SvREFCNT_inc(empty_sv), PublicIdHash); hv_store(exc, "SystemId", 8, system ? *system : SvREFCNT_inc(empty_sv), SystemIdHash); hv_store(exc, "Message", 7, newUTF8SVpv((char*)msg, 0), 0); hv_store(exc, "Exception", 9, newUTF8SVpv((char*)err, 0), 0); hv_store(exc, "LineNumber", 10, newSViv((IV)XML_GetCurrentLineNumber(parser)), 0); hv_store(exc, "ColumnNumber", 12, newSViv((IV)XML_GetCurrentColumnNumber(parser)+1), 0); hv_store((HV*)SvRV(cbv->self_sv), "ErrorMessage", 12, newUTF8SVpv((char*)msg, 0), 0); ENTER; SAVETMPS; PUSHMARK(sp); EXTEND(sp, 2); PUSHs(cbv->self_sv); PUSHs(newRV_noinc((SV*)exc)); PUTBACK; perl_call_method("fatal_error", G_DISCARD); FREETMPS; LEAVE; myfree(msg); } /* End append_error */ static SV * generate_model(XML_Content *model) { HV * hash = newHV(); SV * obj = newRV_noinc((SV *) hash); sv_bless(obj, gv_stashpv("XML::SAX::ExpatXS::ContentModel", 1)); hv_store(hash, "Type", 4, newSViv(model->type), 0); if (model->quant != XML_CQUANT_NONE) { hv_store(hash, "Quant", 5, newSVpv(QuantChar[model->quant], 1), 0); } switch(model->type) { case XML_CTYPE_NAME: hv_store(hash, "Tag", 3, newSVpv((char *)model->name, 0), 0); break; case XML_CTYPE_MIXED: case XML_CTYPE_CHOICE: case XML_CTYPE_SEQ: if (model->children && model->numchildren) { AV * children = newAV(); int i; for (i = 0; i < model->numchildren; i++) { av_push(children, generate_model(&model->children[i])); } hv_store(hash, "Children", 8, newRV_noinc((SV *) children), 0); } break; } return obj; } /* End generate_model */ static int parse_stream(XML_Parser parser, SV * ioref) { dSP; SV * tbuff; SV * tsiz; char * linebuff; STRLEN lblen; STRLEN br = 0; int buffsize; int done = 0; int ret = 1; char * msg = NULL; CallbackVector * cbv; char *buff = (char *) 0; cbv = (CallbackVector*) XML_GetUserData(parser); ENTER; SAVETMPS; if (cbv->delim) { int cnt; SV *tline; PUSHMARK(SP); XPUSHs(ioref); PUTBACK ; cnt = perl_call_method("getline", G_SCALAR); SPAGAIN; if (cnt != 1) croak("getline method call failed"); tline = POPs; if (! SvOK(tline)) { lblen = 0; } else { char * chk; linebuff = SvPV(tline, lblen); chk = &linebuff[lblen - cbv->delimlen - 1]; if (lblen > cbv->delimlen + 1 && *chk == *cbv->delim && chk[cbv->delimlen] == '\n' && strnEQ(++chk, cbv->delim + 1, cbv->delimlen - 1)) lblen -= cbv->delimlen + 1; } PUTBACK ; buffsize = lblen; done = lblen == 0; } else { tbuff = newSV(0); tsiz = newSViv(BUFSIZE); buffsize = BUFSIZE; } while (! done) { char *buffer = XML_GetBuffer(parser, buffsize); if (! buffer) croak("Ran out of memory for input buffer"); SAVETMPS; if (cbv->delim) { Copy(linebuff, buffer, lblen, char); br = lblen; done = 1; } else { int cnt; SV * rdres; char * tb; PUSHMARK(SP); EXTEND(SP, 3); PUSHs(ioref); PUSHs(tbuff); PUSHs(tsiz); PUTBACK ; cnt = perl_call_method("read", G_SCALAR); SPAGAIN ; if (cnt != 1) croak("read method call failed"); rdres = POPs; if (! SvOK(rdres)) croak("read error"); tb = SvPV(tbuff, br); if (br > 0) Copy(tb, buffer, br, char); else done = 1; PUTBACK ; } ret = XML_ParseBuffer(parser, br, done); SPAGAIN; /* resync local SP in case callbacks changed global stack */ if (! ret) break; FREETMPS; } if (! ret) append_error(parser, msg); if (! cbv->delim) { SvREFCNT_dec(tsiz); SvREFCNT_dec(tbuff); } FREETMPS; LEAVE; return ret; } /* End parse_stream */ static HV * gen_ns_node(const char * name, AV * ns_stack) { char *pos = strchr(name, NSDELIM); HV *ret = newHV(); if (pos && pos > name) { SV *new_name; SV *uri = newUTF8SVpv((char *)name, pos - name); AV *ns_entry = get_ns_mapping(ns_stack, NULL, SvPV(uri, PL_na)); SV **prefix = av_fetch(ns_entry, 0, 0); if (SvOK(*prefix)) { /* generate Name = prefix:localname */ if (SvCUR(*prefix)) { char *localname = pos; localname++; new_name = newSVsv(*prefix); sv_catpvn(new_name, ":", 1); sv_catpv(new_name, localname); SvUTF8_on(new_name); } else { /* xmlns default */ char *localname = pos; localname++; new_name = newUTF8SVpv(localname, 0); } } else { new_name = newUTF8SVpv((char *)name, 0); } hv_store(ret, "Name", 4, new_name, NameHash); hv_store(ret, "Prefix", 6, newSVsv(*prefix), PrefixHash); hv_store(ret, "NamespaceURI", 12, uri, NamespaceURIHash); hv_store(ret, "LocalName", 9, newUTF8SVpv((char *)++pos, 0), LocalNameHash); } else { SV *svname = newUTF8SVpv((char *)name, 0); hv_store(ret, "Name", 4, svname, NameHash); hv_store(ret, "Prefix", 6, SvREFCNT_inc(empty_sv), PrefixHash); hv_store(ret, "NamespaceURI", 12, SvREFCNT_inc(empty_sv), NamespaceURIHash); hv_store(ret, "LocalName", 9, SvREFCNT_inc(svname), LocalNameHash); } return ret; } /* End gen_ns_node */ static void sendCharacterData(void *userData, SV *buffer) { dSP; CallbackVector* cbv = (CallbackVector*) userData; SV *data; if (cbv->feat_locator && !cbv->feat_join) XML_DefaultCurrent(cbv->p); /* warn("char refcnt: %d\n", SvREFCNT(cbv->chr_hv)); */ if (SvREFCNT(cbv->chr_hv) == 1) { SvREFCNT_inc(cbv->chr_hv); } else { cbv->chr_hv = newHV(); } /* can't be the same struct as buffer */ data = newSVsv(buffer); ENTER; SAVETMPS; hv_store(cbv->chr_hv, "Data", 4, data, DataHash); PUSHMARK(sp); EXTEND(sp, 1); /* PUSHs(cbv->self_sv); */ PUSHs(sv_2mortal(newRV_noinc((SV*)cbv->chr_hv))); PUTBACK; perl_call_sv(cbv->char_sv, G_DISCARD); FREETMPS; LEAVE; /* warn("leaving ch: %d\n", SvREFCNT((SV*)cvbv->chr_hv)); */ } /* End sendCharacterData */ static void characterData(void *userData, const char *s, int len) { dSP; CallbackVector* cbv = (CallbackVector*) userData; /* joining character data or not */ if (cbv->feat_join) { sv_catsv(cbv->chrbuffer, sv_2mortal(newUTF8SVpv((char *)s, len))); if (cbv->feat_locator) XML_DefaultCurrent(cbv->p); } else { sendCharacterData(userData, sv_2mortal(newUTF8SVpv((char *)s, len))); } } /* End characterData */ static void startElement(void *userData, const char *name, const char **atts) { dSP; CallbackVector* cbv = (CallbackVector*) userData; SV ** pcontext; HV *node; SV *element; xse_characters(userData, cbv->chrbuffer); if (cbv->feat_locator) XML_DefaultCurrent(cbv->p); if (!cbv->atts_ready) cbv->atts = newHV(); node = gen_ns_node(name, cbv->ns_stack); while (*atts) { HV * attname; SV *keyname; char *key; STRLEN klen; char *pos = strchr(*atts, NSDELIM); key = (char *)*atts; attname = gen_ns_node(key, cbv->ns_stack); atts++; if (*atts) { hv_store(attname, "Value", 5, newUTF8SVpv((char*)*atts++,0), ValueHash); } keyname = newUTF8SVpv("{", 1); if (pos && pos > key) { sv_catpvn(keyname, key, pos - key); // -pc - sv_catpvn(keyname, "}", 1); sv_catpv(keyname, strchr(key, NSDELIM)+1); } else { sv_catpvn(keyname, "}", 1); sv_catpv(keyname, key); } hv_store_ent(cbv->atts, keyname, newRV_noinc((SV*)attname), 0); SvREFCNT_dec(keyname); } hv_store(node, "Attributes", 10, newRV_noinc((SV*)cbv->atts), AttributesHash); ENTER; SAVETMPS; element = newRV_noinc((SV*)node); PUSHMARK(sp); EXTEND(sp, 1); /* PUSHs(cbv->self_sv); */ PUSHs(element); PUTBACK; perl_call_sv(cbv->start_sv, G_DISCARD); FREETMPS; LEAVE; av_push(cbv->context, element); cbv->atts_ready = 0; /* warn("leaving: %d\n", SvREFCNT((SV*)element)); */ } /* End startElement */ static void endElement(void *userData, const char *name) { dSP; CallbackVector* cbv = (CallbackVector*) userData; SV *top; HV *node; HV *end_node; HE *next; xse_characters(userData, cbv->chrbuffer); if (cbv->feat_locator) XML_DefaultCurrent(cbv->p); top = av_pop(cbv->context); ENTER; SAVETMPS; node = (HV*)SvRV(top); /* warn("startEl refcnt: %d\n", SvREFCNT(node)); */ if (SvREFCNT(node) == 1) { /* reusing the same struct as in start_element */ end_node = node; hv_delete(end_node, "Attributes", 10, G_DISCARD); SvREFCNT_inc(node); } else { /* copy the node (can't be the same struct as in start_element */ end_node = newHV(); hv_iterinit(node); while (next = hv_iternext(node)) { U32 keylen; char *key = hv_iterkey(next, &keylen); SV *value = hv_iterval(node, next); if (strncmp(key, "Attributes", 10) != 0) { // copy everything except attributes hv_store(end_node, key, keylen, newSVsv(value), 0); } } } PUSHMARK(sp); EXTEND(sp, 1); /* PUSHs(cbv->self_sv); */ PUSHs(sv_2mortal(newRV_noinc((SV*)end_node))); PUTBACK; perl_call_sv(cbv->end_sv, G_DISCARD); FREETMPS; LEAVE; SvREFCNT_dec(top); } /* End endElement */ static void processingInstruction(void *userData, const char *target, const char *data) { dSP; CallbackVector* cbv = (CallbackVector*) userData; HV *thing = newHV(); xse_characters(userData, cbv->chrbuffer); if (cbv->feat_locator) XML_DefaultCurrent(cbv->p); hv_store(thing, "Target", 6, newUTF8SVpv((char*)target, 0), TargetHash); if (data) hv_store(thing, "Data", 4, newUTF8SVpv((char*)data, 0), DataHash); ENTER; SAVETMPS; PUSHMARK(sp); EXTEND(sp, 3); PUSHs(cbv->self_sv); PUSHs(sv_2mortal(newRV_noinc((SV*)thing))); PUTBACK; perl_call_method("processing_instruction", G_DISCARD); FREETMPS; LEAVE; } /* End processingInstruction */ static void commenthandle(void *userData, const char *string) { dSP; CallbackVector * cbv = (CallbackVector*) userData; HV *thing = newHV(); xse_characters(userData, cbv->chrbuffer); hv_store(thing, "Data", 4, newUTF8SVpv((char*)string, 0), DataHash); ENTER; SAVETMPS; PUSHMARK(sp); EXTEND(sp, 1); /* PUSHs(cbv->self_sv); */ PUSHs(sv_2mortal(newRV_noinc((SV*)thing))); PUTBACK; perl_call_sv(cbv->comment_sv, G_DISCARD); /* perl_call_method("comment", G_DISCARD); */ FREETMPS; LEAVE; } /* End commenthandler */ static void startCdata(void *userData) { dSP; CallbackVector* cbv = (CallbackVector*) userData; xse_characters(userData, cbv->chrbuffer); ENTER; SAVETMPS; PUSHMARK(sp); XPUSHs(cbv->self_sv); PUTBACK; perl_call_method("start_cdata", G_DISCARD); FREETMPS; LEAVE; } /* End startCdata */ static void endCdata(void *userData) { dSP; CallbackVector* cbv = (CallbackVector*) userData; xse_characters(userData, cbv->chrbuffer); ENTER; SAVETMPS; PUSHMARK(sp); XPUSHs(cbv->self_sv); PUTBACK; perl_call_method("end_cdata", G_DISCARD); FREETMPS; LEAVE; } /* End endCdata */ static void nsStart(void *userdata, const XML_Char *prefix, const XML_Char *uri){ dSP; CallbackVector* cbv = (CallbackVector*) userdata; HV *nsatt = newHV(); xse_characters(userdata, cbv->chrbuffer); if (cbv->feat_locator) XML_DefaultCurrent(cbv->p); /* NS declarations are reported as common attributes or not */ if (cbv->feat_nsatts) { char *keyname; keyname = (char *) mymalloc(prefix ? (strlen(prefix) + 37) : 37); if (!cbv->atts_ready) { cbv->atts = newHV(); cbv->atts_ready = 1; } if (prefix) { char *a_name; a_name = (char *) mymalloc(strlen(prefix) + 7); strcpy(a_name, "xmlns:"); strcat(a_name, prefix); strcpy(keyname, (cbv->feat_perlxmlns || cbv->feat_xmlns) ? "{http://www.w3.org/2000/xmlns/}" : "{}"); hv_store(nsatt, "Name", 4, newUTF8SVpv(a_name, strlen(a_name)), NameHash); hv_store(nsatt, "Prefix", 6, newUTF8SVpv("xmlns", 5), PrefixHash); hv_store(nsatt, "LocalName", 9, newUTF8SVpv((char*)prefix, strlen(prefix)), LocalNameHash); hv_store(nsatt, "NamespaceURI", 12, (cbv->feat_perlxmlns || cbv->feat_xmlns) ? newUTF8SVpv("http://www.w3.org/2000/xmlns/", 29) : SvREFCNT_inc(empty_sv), NamespaceURIHash); myfree(a_name); } else { strcpy(keyname, cbv->feat_xmlns ? "{http://www.w3.org/2000/xmlns/}" : "{}"); hv_store(nsatt, "Name", 4, newUTF8SVpv("xmlns", 5), NameHash); hv_store(nsatt, "Prefix", 6, SvREFCNT_inc(empty_sv), PrefixHash); hv_store(nsatt, "LocalName", 9, newUTF8SVpv("xmlns", 5), LocalNameHash); hv_store(nsatt, "NamespaceURI", 12, cbv->feat_xmlns ? newUTF8SVpv("http://www.w3.org/2000/xmlns/", 29) : SvREFCNT_inc(empty_sv), NamespaceURIHash); } strcat(keyname, prefix ? prefix : "xmlns"); hv_store(nsatt, "Value", 5, uri ? newUTF8SVpv((char*)uri, strlen(uri)) : SvREFCNT_inc(empty_sv), ValueHash); hv_store(cbv->atts, keyname, strlen(keyname), newRV_noinc((SV*)nsatt), 0); myfree(keyname); } ENTER; SAVETMPS; PUSHMARK(sp); EXTEND(sp, 3); PUSHs(cbv->self_sv); PUSHs(sv_2mortal(newRV_noinc((SV*)add_ns_mapping(cbv->ns_stack, (char *)prefix, (char *)uri)))); PUTBACK; perl_call_method("start_prefix_mapping", G_DISCARD); FREETMPS; LEAVE; } /* End nsStart */ static void nsEnd(void *userdata, const XML_Char *prefix) { dSP; CallbackVector* cbv = (CallbackVector*) userdata; HV *node = newHV(); xse_characters(userdata, cbv->chrbuffer); if (cbv->feat_locator) XML_DefaultCurrent(cbv->p); hv_store(node, "Prefix", 6, (prefix == NULL) ? SvREFCNT_inc(empty_sv) : newUTF8SVpv((char *)prefix, 0), PrefixHash); ENTER; SAVETMPS; PUSHMARK(sp); EXTEND(sp, 2); PUSHs(cbv->self_sv); PUSHs(sv_2mortal(newRV_noinc((SV*)node))); PUTBACK; perl_call_method("end_prefix_mapping", G_DISCARD); FREETMPS; LEAVE; del_ns_mapping(cbv->ns_stack, (char*)prefix); } /* End nsEnd */ static void elementDecl(void *data, const char *name, XML_Content *model) { dSP; CallbackVector *cbv = (CallbackVector*) data; HV *thing = newHV(); SV *cmod; ENTER; SAVETMPS; cmod = generate_model(model); hv_store(thing, "Name", 4, newUTF8SVpv((char*)name, 0), NameHash); hv_store(thing, "Model", 5, cmod, 0); Safefree(model); PUSHMARK(sp); EXTEND(sp, 3); PUSHs(cbv->self_sv); PUSHs(sv_2mortal(newRV_noinc((SV*)thing))); PUTBACK; perl_call_method("element_decl", G_DISCARD); FREETMPS; LEAVE; } /* End elementDecl */ static void attributeDecl(void * data, const char * elname, const char * attname, const char * att_type, const char * dflt, int reqorfix) { dSP; CallbackVector *cbv = (CallbackVector*) data; HV * node = newHV(); SV * dfltsv; SV * valsv; if (dflt && reqorfix) { dfltsv = newUTF8SVpv("#FIXED", 0); valsv = newUTF8SVpv((char*)dflt, 0); } else if (dflt) { dfltsv = &PL_sv_undef; valsv = newUTF8SVpv((char*)dflt, 0); } else { dfltsv = newUTF8SVpv(reqorfix ? "#REQUIRED" : "#IMPLIED", 0); valsv = &PL_sv_undef; } hv_store(node, "eName", 5, newUTF8SVpv((char *)elname, 0), 0); hv_store(node, "aName", 5, newUTF8SVpv((char *)attname, 0), 0); hv_store(node, "Type", 4, newUTF8SVpv((char *)att_type, 0), 0); hv_store(node, "Mode", 4, dfltsv, 0); hv_store(node, "Value", 5, valsv, ValueHash); ENTER; SAVETMPS; PUSHMARK(sp); EXTEND(sp, 5); PUSHs(cbv->self_sv); PUSHs(sv_2mortal(newRV_noinc((SV*)node))); PUTBACK; perl_call_method("attribute_decl", G_DISCARD); FREETMPS; LEAVE; } /* End attributeDecl */ static void skippedEntity(void * data, const char * name, int isparam) { dSP; CallbackVector* cbv = (CallbackVector*) data; HV * entity = newHV(); char* pname; xse_characters(data, cbv->chrbuffer); if (cbv->feat_locator) XML_DefaultCurrent(cbv->p); pname = (char*) mymalloc(strlen(name) + 2); strcpy(pname, "%"); hv_store(entity, "Name", 4, newUTF8SVpv((char*)(isparam ? strcat(pname, name) : name), 0), NameHash); myfree(pname); ENTER; SAVETMPS; PUSHMARK(sp); EXTEND(sp, 2); PUSHs(cbv->self_sv); PUSHs(sv_2mortal(newRV_noinc((SV*)entity))); PUTBACK; perl_call_method("skipped_entity", G_DISCARD); FREETMPS; LEAVE; } /* skippedEntity */ static void entityDecl(void *data, const char *name, int isparam, const char *value, int vlen, const char *base, const char *sysid, const char *pubid, const char *notation) { dSP; CallbackVector *cbv = (CallbackVector*) data; HV * node = newHV(); char* pname; pname = (char*) mymalloc(strlen(name) + 2); strcpy(pname, "%"); hv_store(node, "Name", 4, newUTF8SVpv((char *)(isparam ? strcat(pname, name) : name), 0), NameHash); myfree(pname); ENTER; SAVETMPS; PUSHMARK(sp); EXTEND(sp, 2); PUSHs(cbv->self_sv); /* --- internal entity --- */ if (value) { hv_store(node, "Value", 5, newUTF8SVpv((char *)value, vlen), 0); PUSHs(sv_2mortal(newRV_noinc((SV*)node))); PUTBACK; perl_call_method("internal_entity_decl", G_DISCARD); /* --- external parsed entity --- */ } else { char* key; hv_store(node, "SystemId", 8, sysid ? newUTF8SVpv((char*)sysid, 0) : SvREFCNT_inc(empty_sv), SystemIdHash); hv_store(node, "PublicId", 8, pubid ? newUTF8SVpv((char*)pubid, 0) : SvREFCNT_inc(empty_sv), PublicIdHash); PUSHs(sv_2mortal(newRV_noinc((SV*)node))); PUTBACK; perl_call_method("external_entity_decl", G_DISCARD); /* storing entity name */ key = (char*) mymalloc(300); xse_extern_ent_key(key, base, sysid, pubid); hv_store(cbv->extern_hv, key, strlen(key), newUTF8SVpv((char*)name, 0), 0); myfree(key); } FREETMPS; LEAVE; } /* End entityDecl */ static void doctypeStart(void *userData, const char* name, const char* sysid, const char* pubid, int hasinternal) { dSP; CallbackVector *cbv = (CallbackVector*) userData; HV *node = newHV(); char* key; hv_store(node, "Name", 4, newUTF8SVpv((char*)name, 0), NameHash); hv_store(node, "SystemId", 8, sysid ? newUTF8SVpv((char*)sysid, 0) : SvREFCNT_inc(empty_sv), SystemIdHash); hv_store(node, "PublicId", 8, pubid ? newUTF8SVpv((char*)pubid, 0) : SvREFCNT_inc(empty_sv), PublicIdHash); ENTER; SAVETMPS; PUSHMARK(sp); EXTEND(sp, 2); PUSHs(cbv->self_sv); PUSHs(sv_2mortal(newRV_noinc((SV*)node))); PUTBACK; perl_call_method("start_dtd", G_DISCARD); FREETMPS; LEAVE; /* storing entity name */ key = (char*) mymalloc(300); xse_extern_ent_key(key, "", sysid, pubid); hv_store(cbv->extern_hv, key, strlen(key), newUTF8SVpv("[dtd]", 0), 0); myfree(key); } /* End doctypeStart */ static void doctypeEnd(void *userData) { dSP; CallbackVector *cbv = (CallbackVector*) userData; ENTER; SAVETMPS; PUSHMARK(sp); EXTEND(sp, 1); PUSHs(cbv->self_sv); PUTBACK; perl_call_method("end_dtd", G_DISCARD); FREETMPS; LEAVE; } /* End doctypeEnd */ static void xmlDecl(void *userData, const char *version, const char *encoding, int standalone) { dSP; CallbackVector *cbv = (CallbackVector*) userData; HV *node = newHV(); hv_store(node, "Version", 7, version ? newUTF8SVpv((char*)version, 0) : SvREFCNT_inc(empty_sv), VersionHash); hv_store(node, "Encoding", 8, encoding ? newUTF8SVpv((char*)encoding, 0) : SvREFCNT_inc(empty_sv), EncodingHash); hv_store(node, "Standalone", 10, standalone == -1 ? &PL_sv_undef : (standalone ? newUTF8SVpv("yes",0) : newUTF8SVpv("no",0)), 0); /* 1/0 instead of 'yes'/'no' hv_store(node, "Standalone", 10, standalone == -1 ? &PL_sv_undef : (standalone ? &PL_sv_yes : &PL_sv_no), 0); */ /* writing to locator */ hv_store(cbv->locator_hv, "XMLVersion", 10, version ? newUTF8SVpv((char*)version, 0) : newUTF8SVpv("1.0", 3), XMLVersionHash); if (SvCUR(*(hv_fetch(cbv->locator_hv, "Encoding", 8, 0))) == 0) { hv_store(cbv->locator_hv, "Encoding", 8, encoding ? newUTF8SVpv((char*)encoding, 0) : newUTF8SVpv("utf-8",5), EncodingHash); } ENTER; SAVETMPS; PUSHMARK(sp); EXTEND(sp, 2); PUSHs(cbv->self_sv); PUSHs(sv_2mortal(newRV_noinc((SV*)node))); PUTBACK; perl_call_method("xml_decl", G_DISCARD); FREETMPS; LEAVE; } /* End xmlDecl */ static void unparsedEntityDecl(void *userData, const char* entity, const char* base, const char* sysid, const char* pubid, const char* notation) { dSP; CallbackVector* cbv = (CallbackVector*) userData; HV *node = newHV(); hv_store(node, "Name", 4, newUTF8SVpv((char*)entity, 0), NameHash); hv_store(node, "PublicId", 8, pubid ? newUTF8SVpv((char*)pubid, 0) : SvREFCNT_inc(empty_sv), PublicIdHash); hv_store(node, "SystemId", 8, newUTF8SVpv((char*)sysid, 0), SystemIdHash); hv_store(node, "Notation", 8, newUTF8SVpv((char*)notation, 0), 0); ENTER; SAVETMPS; PUSHMARK(sp); EXTEND(sp, 6); PUSHs(cbv->self_sv); PUSHs(sv_2mortal(newRV_noinc((SV*)node))); PUTBACK; perl_call_method("unparsed_entity_decl", G_DISCARD); FREETMPS; LEAVE; } /* End unparsedEntityDecl */ static void notationDecl(void *userData, const char *name, const char *base, const char *sysid, const char *pubid) { dSP; CallbackVector* cbv = (CallbackVector*) userData; HV *node = newHV(); hv_store(node, "Name", 4, newUTF8SVpv((char*)name, 0), NameHash); hv_store(node, "SystemId", 8, sysid ? newUTF8SVpv((char*)sysid, 0) : SvREFCNT_inc(empty_sv), SystemIdHash); hv_store(node, "PublicId", 8, pubid ? newUTF8SVpv((char*)pubid, 0) : SvREFCNT_inc(empty_sv), PublicIdHash); PUSHMARK(sp); XPUSHs(cbv->self_sv); XPUSHs(sv_2mortal(newRV_noinc((SV*)node))); PUTBACK; perl_call_method("notation_decl", G_DISCARD); } /* End notationDecl */ static int externalEntityRef(XML_Parser parser, const char* open, const char* base, const char* sysid, const char* pubid) { dSP; #if defined(USE_THREADS) && PATCHLEVEL==6 dTHX; #endif int count; int ret = 0; int parse_done = 0; CallbackVector* cbv = (CallbackVector*) XML_GetUserData(parser); char* key; SV **name; HV *start = newHV(); HV *end = newHV(); char* pname; xse_characters((void*)cbv, cbv->chrbuffer); /* fetching entity name */ key = (char*) mymalloc(300); xse_extern_ent_key(key, base, sysid, pubid); name = hv_fetch(cbv->extern_hv, key, strlen(key), 0); myfree(key); pname = SvPV_nolen(*name); if (( (pname[0] == '[' || pname[0] == '%') && !cbv->feat_entpar) || ( (pname[0] != '[' && pname[0] != '%') && !cbv->feat_entgen)) { skippedEntity(cbv, pname, 0); return 1; } ENTER ; SAVETMPS ; /* start_entity */ hv_store(start, "Name", 4, SvREFCNT_inc(*name), NameHash); PUSHMARK(sp); EXTEND(sp, 2); PUSHs(cbv->self_sv); PUSHs(sv_2mortal(newRV_noinc((SV*)start))); PUTBACK; perl_call_method("start_entity", G_DISCARD); SPAGAIN; /* open the entity */ PUSHMARK(sp); EXTEND(sp, 4); PUSHs(cbv->self_sv); PUSHs(base ? sv_2mortal(newUTF8SVpv((char*) base, 0)) : &PL_sv_undef); PUSHs(sysid ? sv_2mortal(newUTF8SVpv((char*) sysid, 0)) : &PL_sv_undef); PUSHs(pubid ? sv_2mortal(newUTF8SVpv((char*) pubid, 0)) : &PL_sv_undef); PUTBACK; count = perl_call_method("_get_external_entity", G_SCALAR); SPAGAIN; if (count >= 1) { SV * result = POPs; int type; if (result && (type = SvTYPE(result)) > 0) { SV **pval = hv_fetch((HV*)SvRV(cbv->self_sv), "Parser", 6, 0); if (! pval || ! SvIOK(*pval)) { append_error(parser, "Can't find parser entry in XML::SAX::ExpatXS object"); } else { XML_Parser entpar; char *errmsg = (char *) 0; entpar = XML_ExternalEntityParserCreate(parser, open, 0); XML_SetBase(entpar, XML_GetBase(parser)); sv_setiv(*pval, (IV) entpar); cbv->p = entpar; PUSHMARK(sp); EXTEND(sp, 2); PUSHs(*pval); PUSHs(result); PUTBACK; count = perl_call_pv("XML::SAX::ExpatXS::Do_External_Parse", G_SCALAR | G_EVAL); SPAGAIN; if (SvTRUE(ERRSV)) { char *hold; STRLEN len; POPs; hold = SvPV(ERRSV, len); New(326, errmsg, len + 1, char); if (len) Copy(hold, errmsg, len, char); goto Extparse_Cleanup; } if (count > 0) ret = POPi; /* warn("external parsing return value: %d", ret); */ parse_done = 1; Extparse_Cleanup: cbv->p = parser; sv_setiv(*pval, (IV) parser); XML_ParserFree(entpar); if (SvTRUE(ERRSV)) append_error(parser, SvPV(ERRSV, PL_na)); } } } if (! ret && ! parse_done) append_error(parser, "Handler couldn't resolve external entity"); /* end entity */ hv_store(end, "Name", 4, SvREFCNT_inc(*name), NameHash); PUSHMARK(sp); EXTEND(sp, 2); PUSHs(cbv->self_sv); PUSHs(sv_2mortal(newRV_noinc((SV*)end))); PUTBACK; perl_call_method("end_entity", G_DISCARD); FREETMPS ; LEAVE ; return ret; } /* End externalEntityRef */ /*================================================================ ** This is the function that expat calls to convert multi-byte sequences ** for external encodings. Each byte in the sequence is used to index ** into the current map to either set the next map or, in the case of ** the final byte, to get the corresponding Unicode scalar, which is ** returned. */ static int convert_to_unicode(void *data, const char *seq) { Encinfo *enc = (Encinfo *) data; PrefixMap *curpfx; int count; int index = 0; for (count = 0; count < 4; count++) { unsigned char byte = (unsigned char) seq[count]; unsigned char bndx; unsigned char bmsk; int offset; curpfx = &enc->prefixes[index]; offset = ((int) byte) - curpfx->min; if (offset < 0) break; if (offset >= curpfx->len && curpfx->len != 0) break; bndx = byte >> 3; bmsk = 1 << (byte & 0x7); if (curpfx->ispfx[bndx] & bmsk) { index = enc->bytemap[curpfx->bmap_start + offset]; } else if (curpfx->ischar[bndx] & bmsk) { return enc->bytemap[curpfx->bmap_start + offset]; } else break; } return -1; } /* End convert_to_unicode */ static int unknownEncoding(void *unused, const char *name, XML_Encoding *info) { SV ** encinfptr; Encinfo *enc; int namelen; int i; char buff[42]; namelen = strlen(name); if (namelen > 40) return 0; /* Make uppercase */ for (i = 0; i < namelen; i++) { char c = name[i]; if (c >= 'a' && c <= 'z') c -= 'a' - 'A'; buff[i] = c; } if (! EncodingTable) { EncodingTable = perl_get_hv("XML::SAX::ExpatXS::Encoding::Encoding_Table", FALSE); if (! EncodingTable) croak("Can't find XML::SAX::ExpatXS::Encoding::Encoding_Table"); } encinfptr = hv_fetch(EncodingTable, buff, namelen, 0); if (! encinfptr || ! SvOK(*encinfptr)) { /* Not found, so try to autoload */ dSP; int count; ENTER; SAVETMPS; PUSHMARK(sp); XPUSHs(sv_2mortal(newSVpvn(buff,namelen))); PUTBACK; perl_call_pv("XML::SAX::ExpatXS::Encoding::load_encoding", G_DISCARD); encinfptr = hv_fetch(EncodingTable, buff, namelen, 0); FREETMPS; LEAVE; if (! encinfptr || ! SvOK(*encinfptr)) return 0; } if (! sv_derived_from(*encinfptr, "XML::SAX::ExpatXS::Encinfo")) croak("Entry in XML::SAX::ExpatXS::Encoding::Encoding_Table not an Encinfo object"); enc = (Encinfo *) SvIV((SV*)SvRV(*encinfptr)); Copy(enc->firstmap, info->map, 256, int); info->release = NULL; if (enc->prefixes_size) { info->data = (void *) enc; info->convert = convert_to_unicode; } else { info->data = NULL; info->convert = NULL; } return 1; } /* End unknownEncoding */ static void recString(void *userData, const char *string, int len) { int i, ln = 0, cl = 0; CallbackVector *cbv = (CallbackVector*) userData; xse_get_end_position(cbv->p, ln, cl, string, len); /* printf("-->%d, %d\n", ln, cl); */ hv_store(cbv->locator_hv, "LineNumber", 10, newSViv(ln), 0); hv_store(cbv->locator_hv, "ColumnNumber", 12, newSViv(cl), 0); if (cbv->feat_recstring) { if (SvCUR(cbv->chrbuffer) > 0) { sv_setsv(cbv->recstring, cbv->chrbuffer); } else { sv_setpvn(cbv->recstring, (char *) string, len); } } } /* End recString */ MODULE = XML::SAX::ExpatXS PACKAGE = XML::SAX::ExpatXS PREFIX = XML_ PROTOTYPES: DISABLE BOOT: PERL_HASH(PrefixHash, "Prefix", 6); PERL_HASH(NamespaceURIHash, "NamespaceURI", 12); PERL_HASH(NameHash, "Name", 4); PERL_HASH(LocalNameHash, "LocalName", 9); PERL_HASH(AttributesHash, "Attributes", 10); PERL_HASH(ValueHash, "Value", 5); PERL_HASH(DataHash, "Data", 4); PERL_HASH(TargetHash, "Target", 6); PERL_HASH(VersionHash, "Version", 7); PERL_HASH(XMLVersionHash, "XMLVersion", 10); PERL_HASH(EncodingHash, "Encoding", 8); PERL_HASH(PublicIdHash, "PublicId", 8); PERL_HASH(SystemIdHash, "SystemId", 8); empty_sv = newUTF8SVpv("", 0); XML_Parser XML_ParserCreate(self_sv, enc_sv, namespaces) SV * self_sv SV * enc_sv int namespaces CODE: { CallbackVector *cbv; enum XML_ParamEntityParsing pep = XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE; char *enc = (char *) (SvTRUE(enc_sv) ? SvPV(enc_sv,PL_na) : 0); SV ** spp; Newz(320, cbv, 1, CallbackVector); cbv->self_sv = SvREFCNT_inc(self_sv); spp = hv_fetch((HV*)SvRV(cbv->self_sv), "NoExpand", 8, 0); if (spp && SvTRUE(*spp)) cbv->no_expand = 1; spp = hv_fetch((HV*)SvRV(cbv->self_sv), "Context", 7, 0); if (! spp || ! *spp || !SvROK(*spp)) croak("XML::SAX::ExpatXS instance missing Context"); cbv->context = (AV*) SvRV(*spp); spp = hv_fetch((HV*)SvRV(cbv->self_sv), "Namespace_Stack", 15, FALSE); if (!spp || !*spp || !SvROK(*spp)) croak("XML::SAX::ExpatXS instance missing Namespace_Stack"); cbv->ns_stack = (AV *)SvRV(*spp); cbv->ns = (unsigned) namespaces; if (namespaces) { RETVAL = XML_ParserCreate_MM(enc, &ms, nsdelim); XML_SetNamespaceDeclHandler(RETVAL, nsStart, nsEnd); } else { RETVAL = XML_ParserCreate_MM(enc, &ms, NULL); } cbv->p = RETVAL; XML_SetUserData(RETVAL, (void *) cbv); XML_SetElementHandler(RETVAL, startElement, endElement); XML_SetCharacterDataHandler(RETVAL, characterData); XML_SetProcessingInstructionHandler(RETVAL, processingInstruction); XML_SetCommentHandler(RETVAL, commenthandle); XML_SetCdataSectionHandler(RETVAL, startCdata, endCdata); XML_SetElementDeclHandler(RETVAL, elementDecl); XML_SetAttlistDeclHandler(RETVAL, attributeDecl); XML_SetEntityDeclHandler(RETVAL, entityDecl); XML_SetUnparsedEntityDeclHandler(RETVAL, unparsedEntityDecl); XML_SetNotationDeclHandler(RETVAL, notationDecl); XML_SetExternalEntityRefHandler(RETVAL, externalEntityRef); XML_SetXmlDeclHandler(RETVAL, xmlDecl); XML_SetStartDoctypeDeclHandler(RETVAL, doctypeStart); XML_SetEndDoctypeDeclHandler(RETVAL, doctypeEnd); XML_SetSkippedEntityHandler(RETVAL, skippedEntity); XML_SetUnknownEncodingHandler(RETVAL, unknownEncoding, 0); /* reading features */ cbv->feat_perlxmlns = get_feature(cbv, "http://xmlns.perl.org/sax/xmlns-uris"); cbv->feat_xmlns = cbv->feat_perlxmlns ? 0 : get_feature(cbv, "http://xml.org/sax/features/xmlns-uris"); cbv->feat_join = get_feature(cbv, "http://xmlns.perl.org/sax/join-character-data"); cbv->feat_nsatts = get_feature(cbv, "http://xmlns.perl.org/sax/ns-attributes"); cbv->feat_locator = get_feature(cbv, "http://xmlns.perl.org/sax/locator"); cbv->feat_recstring = get_feature(cbv, "http://xmlns.perl.org/sax/recstring"); cbv->feat_entgen = get_feature(cbv, "http://xml.org/sax/features/external-general-entities"); cbv->feat_entpar = get_feature(cbv, "http://xml.org/sax/features/external-parameter-entities"); /* end of reading features */ if (cbv->no_expand) XML_SetDefaultHandler(RETVAL, recString); else XML_SetDefaultHandlerExpand(RETVAL, recString); if (!cbv->feat_entpar) { spp = hv_fetch((HV*)SvRV(cbv->self_sv), "ParseParamEnt", 13, FALSE); if (spp && SvTRUE(*spp)) { cbv->feat_entpar = 1; } } XML_SetParamEntityParsing(RETVAL, pep); cbv->atts_ready = 0; cbv->chrbuffer = newUTF8SVpv("", 0); cbv->chr_hv = newHV(); } OUTPUT: RETVAL void XML_ParserRelease(parser) XML_Parser parser CODE: { CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser); SvREFCNT_dec(cbv->self_sv); } void XML_ParserFree(parser) XML_Parser parser CODE: { CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser); SvREFCNT_dec(cbv->start_sv); SvREFCNT_dec(cbv->end_sv); SvREFCNT_dec(cbv->char_sv); SvREFCNT_dec(cbv->comment_sv); SvREFCNT_dec(cbv->chrbuffer); SvREFCNT_dec(cbv->self_sv); SvREFCNT_dec(cbv->locator_hv); SvREFCNT_dec(cbv->extern_hv); SvREFCNT_dec(cbv->chr_hv); Safefree(cbv); XML_ParserFree(parser); } int XML_ParseString(parser, str) XML_Parser parser SV * str CODE: { CallbackVector * cbv; char * s; STRLEN len; s = SvPV(str, len); cbv = (CallbackVector *) XML_GetUserData(parser); RETVAL = XML_Parse(parser, s, len, 1); SPAGAIN; /* XML_Parse might have changed stack pointer */ if (! RETVAL) append_error(parser, NULL); } OUTPUT: RETVAL int XML_ParseStream(parser, ioref, delim=NULL) XML_Parser parser SV * ioref SV * delim CODE: { SV **delimsv; CallbackVector * cbv; cbv = (CallbackVector *) XML_GetUserData(parser); if (delim && SvOK(delim)) { cbv->delim = SvPV(delim, cbv->delimlen); } else { cbv->delim = (char *) 0; } RETVAL = parse_stream(parser, ioref); SPAGAIN; /* parse_stream might have changed stack pointer */ } OUTPUT: RETVAL int XML_ParsePartial(parser, str) XML_Parser parser SV * str CODE: { CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser); char * s; STRLEN len; s = SvPV(str, len); RETVAL = XML_Parse(parser, s, len, 0); if (! RETVAL) append_error(parser, NULL); } OUTPUT: RETVAL int XML_ParseDone(parser) XML_Parser parser CODE: { RETVAL = XML_Parse(parser, "", 0, 1); if (! RETVAL) append_error(parser, NULL); } OUTPUT: RETVAL void XML_SetBase(parser, base) XML_Parser parser SV * base CODE: { char * b; if (! SvOK(base)) { b = (char *) 0; } else { b = SvPV(base, PL_na); } XML_SetBase(parser, b); } SV * XML_GetBase(parser) XML_Parser parser CODE: { const char *ret = XML_GetBase(parser); if (ret) { ST(0) = sv_newmortal(); sv_setpv(ST(0), ret); } else { ST(0) = &PL_sv_undef; } } HV * XML_GetLocator(parser, pubid, sysid, encoding) XML_Parser parser SV * pubid SV * sysid SV * encoding CODE: { CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser); cbv->locator_hv = newHV(); hv_store(cbv->locator_hv, "LineNumber", 10, newSViv(1), 0); hv_store(cbv->locator_hv, "ColumnNumber", 12, newSViv(1), 0); hv_store(cbv->locator_hv, "XMLVersion", 10, newUTF8SVpv("1.0", 3), XMLVersionHash); hv_store(cbv->locator_hv, "Encoding", 8, SvCUR(encoding) > 0 ? SvREFCNT_inc(encoding) : newUTF8SVpv("", 0), EncodingHash); hv_store(cbv->locator_hv, "SystemId", 8, SvCUR(sysid) > 0 ? SvREFCNT_inc(sysid) : newUTF8SVpv("", 0), SystemIdHash); hv_store(cbv->locator_hv, "PublicId", 8, SvCUR(pubid) > 0 ? SvREFCNT_inc(pubid) : newUTF8SVpv("", 0), PublicIdHash); RETVAL = cbv->locator_hv; } OUTPUT: RETVAL SV * XML_GetRecognizedString(parser) XML_Parser parser CODE: { CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser); cbv->recstring = newUTF8SVpvn("", 0); RETVAL = newRV_noinc(cbv->recstring); } OUTPUT: RETVAL HV * XML_GetExternEnt(parser) XML_Parser parser CODE: { CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser); cbv->extern_hv = newHV(); RETVAL = cbv->extern_hv; } OUTPUT: RETVAL void XML_SetCallbacks(parser, start, end, chars, comment) XML_Parser parser SV * start SV * end SV * chars SV * comment CODE: { CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser); if (cbv->start_sv) sv_setsv(cbv->start_sv, start); else cbv->start_sv = SvREFCNT_inc(start); if (cbv->end_sv) sv_setsv(cbv->end_sv, end); else cbv->end_sv = SvREFCNT_inc(end); if (cbv->char_sv) sv_setsv(cbv->char_sv, chars); else cbv->char_sv = SvREFCNT_inc(chars); if (cbv->comment_sv) sv_setsv(cbv->comment_sv, comment); else cbv->comment_sv = SvREFCNT_inc(comment); } void XML_PositionContext(parser, lines) XML_Parser parser int lines PREINIT: int parsepos; int size; const char *pos = XML_GetInputContext(parser, &parsepos, &size); const char *markbeg; const char *limit; const char *markend; int length, relpos; int cnt; PPCODE: if (! pos) return; for (markbeg = &pos[parsepos], cnt = 0; markbeg >= pos; markbeg--) { if (*markbeg == '\n') { cnt++; if (cnt > lines) break; } } markbeg++; relpos = 0; limit = &pos[size]; for (markend = &pos[parsepos + 1], cnt = 0; markend < limit; markend++) { if (*markend == '\n') { if (cnt == 0) relpos = (markend - markbeg) + 1; cnt++; if (cnt > lines) { markend++; break; } } } length = markend - markbeg; if (relpos == 0) relpos = length; EXTEND(sp, 2); PUSHs(sv_2mortal(newSVpvn((char *) markbeg, length))); PUSHs(sv_2mortal(newSViv(relpos))); void XML_DefaultCurrent(parser) XML_Parser parser CODE: { CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser); XML_DefaultCurrent(parser); } int XML_GetErrorCode(parser) XML_Parser parser int XML_GetCurrentLineNumber(parser) XML_Parser parser int XML_GetCurrentColumnNumber(parser) XML_Parser parser const char * XML_ExpatVersion() long XML_GetCurrentByteIndex(parser) XML_Parser parser int XML_GetSpecifiedAttributeCount(parser) XML_Parser parser char * XML_ErrorString(code) int code CODE: const char *ret = XML_ErrorString(code); ST(0) = sv_newmortal(); sv_setpv((SV*)ST(0), ret); SV * XML_LoadEncoding(data, size) char * data int size CODE: { Encmap_Header *emh = (Encmap_Header *) data; unsigned pfxsize, bmsize; if (size < sizeof(Encmap_Header) || ntohl(emh->magic) != ENCMAP_MAGIC) { RETVAL = &PL_sv_undef; } else { Encinfo *entry; SV *sv; PrefixMap *pfx; unsigned short *bm; int namelen; int i; pfxsize = ntohs(emh->pfsize); bmsize = ntohs(emh->bmsize); if (size != (sizeof(Encmap_Header) + pfxsize * sizeof(PrefixMap) + bmsize * sizeof(unsigned short))) { RETVAL = &PL_sv_undef; } else { /* Convert to uppercase and get name length */ for (i = 0; i < sizeof(emh->name); i++) { char c = emh->name[i]; if (c == (char) 0) break; if (c >= 'a' && c <= 'z') emh->name[i] -= 'a' - 'A'; } namelen = i; RETVAL = newSVpvn(emh->name, namelen); New(322, entry, 1, Encinfo); entry->prefixes_size = pfxsize; entry->bytemap_size = bmsize; for (i = 0; i < 256; i++) { entry->firstmap[i] = ntohl(emh->map[i]); } pfx = (PrefixMap *) &data[sizeof(Encmap_Header)]; bm = (unsigned short *) (((char *) pfx) + sizeof(PrefixMap) * pfxsize); New(323, entry->prefixes, pfxsize, PrefixMap); New(324, entry->bytemap, bmsize, unsigned short); for (i = 0; i < pfxsize; i++, pfx++) { PrefixMap *dest = &entry->prefixes[i]; dest->min = pfx->min; dest->len = pfx->len; dest->bmap_start = ntohs(pfx->bmap_start); Copy(pfx->ispfx, dest->ispfx, sizeof(pfx->ispfx) + sizeof(pfx->ischar), unsigned char); } for (i = 0; i < bmsize; i++) entry->bytemap[i] = ntohs(bm[i]); sv = newSViv(0); sv_setref_pv(sv, "XML::SAX::ExpatXS::Encinfo", (void *) entry); if (! EncodingTable) { EncodingTable = perl_get_hv("XML::SAX::ExpatXS::Encoding::Encoding_Table", FALSE); if (! EncodingTable) croak("Can't find XML::SAX::ExpatXS::Encoding::Encoding_Table"); } hv_store(EncodingTable, emh->name, namelen, sv, 0); } } } OUTPUT: RETVAL void XML_FreeEncoding(enc) Encinfo * enc CODE: Safefree(enc->bytemap); Safefree(enc->prefixes); Safefree(enc); SV * XML_OriginalString(parser) XML_Parser parser CODE: { int parsepos, size; const char *buff = XML_GetInputContext(parser, &parsepos, &size); if (buff) { RETVAL = newSVpvn((char *) &buff[parsepos], XML_GetCurrentByteCount(parser)); } else { RETVAL = newSVpv("", 0); } } OUTPUT: RETVAL int XML_Do_External_Parse(parser, result) XML_Parser parser SV * result CODE: { int type; CallbackVector * cbv = (CallbackVector *) XML_GetUserData(parser); if (SvROK(result) && SvOBJECT(SvRV(result))) { RETVAL = parse_stream(parser, result); } else if (isGV(result)) { RETVAL = parse_stream(parser, sv_2mortal(newRV((SV*) GvIOp(result)))); } else if (SvPOK(result)) { STRLEN eslen; int pret; char *entstr = SvPV(result, eslen); RETVAL = XML_Parse(parser, entstr, eslen, 1); } } OUTPUT: RETVAL XML-SAX-ExpatXS-1.33/lib/000755 000765 000024 00000000000 12042437703 015754 5ustar00pcimprichstaff000000 000000 XML-SAX-ExpatXS-1.33/Makefile.PL000644 000765 000024 00000013012 11551256346 017163 0ustar00pcimprichstaff000000 000000 # This Makefile.PL contains portions borrowed # from XML::Parser and XML::SAX use ExtUtils::MakeMaker; use Config; $expat_libpath = ''; $expat_incpath = ''; my @replacement_args; foreach (@ARGV) { if (/^EXPAT(LIB|INC)PATH=(.+)/) { if ($1 eq 'LIB') { $expat_libpath = $2; } else { $expat_incpath = $2; } } else { push(@replacement_args, $_); } } @ARGV = @replacement_args; if (not $expat_libpath and $] >= 5.006001) { require ExtUtils::Liblist; # Buggy before this ($expat_libpath) = ExtUtils::Liblist->ext('-lexpat'); } unless ($expat_libpath) { # Test for existence of libexpat my $found = 0; foreach (split(/\s+/, $Config{libpth})) { if (-f "$_/libexpat." . $Config{so}) { $found = 1; last; } } unless ($found) { die <<'Expat_Not_Installed;'; Expat must be installed prior to building XML::SAX::ExpatXS and I can't find it in the standard library directories. You can download expat from: http://expat.sourceforge.net/ If expat is installed, but in a non-standard directory, then use the following options to Makefile.PL: EXPATLIBPATH=... To set the directory in which to find libexpat EXPATINCPATH=... To set the directory in which to find expat.h For example: perl Makefile.PL EXPATLIBPATH=/home/me/lib EXPATINCPATH=/home/me/include Note that if you build against a shareable library in a non-standard location you may (on some platforms) also have to set your LD_LIBRARY_PATH environment variable at run time for perl to find the library. Expat_Not_Installed; } } my $libs = "-lexpat"; $libs = "-L$expat_libpath $libs" if $expat_libpath; @extras = (); push(@extras, INC => "-I$expat_incpath") if $expat_incpath; push(@extras, CAPI => 'TRUE') if ($PERL_VERSION >= 5.005 and $OSNAME eq 'MSWin32' and $Config{archname} =~ /-object\b/i); push(@extras, ABSTRACT_FROM => 'lib/XML/SAX/ExpatXS.pm', AUTHOR => 'Matt Sergeant ') if ($ExtUtils::MakeMaker::Version >= 5.4301); # building XML::SAX::ExpatXS::Preload; &build_xml_sax_expatxs_preload; WriteMakefile( NAME => 'XML::SAX::ExpatXS', VERSION_FROM => 'lib/XML/SAX/ExpatXS.pm', PREREQ_PM => { 'XML::SAX' => 0.96, }, LIBS => $libs, ABSTRACT => 'Perl SAX 2 XS extension to Expat parser', AUTHOR => 'Petr Cimprich ', LICENSE => 'perl', @extras ); sub MY::install { package MY; my $script = shift->SUPER::install(@_); if (ExtUtils::MakeMaker::prompt("Do you want to alter ParserDetails.ini?", "Y") =~ /^y/i) { $script =~ s/install :: (.*)$/install :: $1 install_expat_xs/m; $script .= <<"INSTALL"; install_expat_xs : \t\@\$(PERL) -MXML::SAX -e "XML::SAX->add_parser(q(XML::SAX::ExpatXS))->save_parsers()" INSTALL } return $script; } sub build_xml_sax_expatxs_preload { print "Writing XML::SAX::ExpatXS::Preload\n"; my $code = <<'EOHEADER'; package XML::SAX::ExpatXS::Preload; #-----------------------------------------------------# # STOP!!!!! # # This file is generated by the 'Makefile.PL' file # that ships with the XML::SAX::ExpatXS distribution. # If you need to make changes, patch that file NOT # this one. #-----------------------------------------------------# use strict; use vars qw($VERSION); $VERSION = '0.01'; EOHEADER my %EVENT_SPEC = ( start_element => [qw(ContentHandler DocumentHandler Handler)], end_element => [qw(ContentHandler DocumentHandler Handler)], characters => [qw(ContentHandler DocumentHandler Handler)], comment => [qw(DocumentHandler LexicalHandler Handler)], ); for my $ev (keys %EVENT_SPEC) { $code .= <<" EOTOPCODE"; sub get_$ev { my \$self = shift; my \$method; my \$callbacks; if (exists \$self->{ParseOptions}) { \$callbacks = \$self->{ParseOptions}; } else { \$callbacks = \$self; } if (0) { # dummy to make elsif's below compile } EOTOPCODE my ($can_string, $aload_string); for my $h (@{$EVENT_SPEC{$ev}}) { $can_string .= <<" EOCANBLOCK"; elsif (defined \$callbacks->{'$h'} and \$method = \$callbacks->{'$h'}->can('$ev') ) { my \$handler = \$callbacks->{'$h'}; \$self->{Methods}->{'$ev'} = sub { \$method->(\$handler, \@_) }; } EOCANBLOCK $aload_string .= <<" EOALOADBLOCK"; elsif (defined \$callbacks->{'$h'} and \$callbacks->{'$h'}->can('AUTOLOAD') ) { my \$res = eval { \$callbacks->{'$h'}->$ev(\@_) }; if (\$@) { die \$@; } else { my \$handler = \$callbacks->{'$h'}; \$self->{Methods}->{'$ev'} = sub { \$handler->$ev(\@_) }; } } EOALOADBLOCK } $code .= $can_string . $aload_string; $code .= <<" EOFALLTHROUGH"; else { \$self->{Methods}->{'$ev'} = sub { }; } EOFALLTHROUGH $code .= "return 1;\n}\n\n"; } $code .= <<'BODY'; 1; BODY $code .= "__END__\n"; $code .= <<'FOOTER'; =head1 NAME XML::SAX::ExpatXS::Preload - Helper class for XML-SAX-ExpatXS =head1 AUTHOR Petr Cimprich (petr@gingerall.cz) based on an original code of XML::SAX::Base by Kip Hampton (khampton@totalcinema.com). =head1 SEE ALSO L =cut FOOTER open(BASE, ">" . File::Spec->catdir("lib", "XML", "SAX", "ExpatXS", "Preload.pm")) || die "Cannot write Preload.pm: $!"; print BASE $code; close BASE; } XML-SAX-ExpatXS-1.33/MANIFEST000644 000765 000024 00000003236 12042436450 016341 0ustar00pcimprichstaff000000 000000 Changes ExpatXS.xs MANIFEST MANIFEST.SKIP Makefile.PL README encoding.h lib/XML/SAX/ExpatXS.pm lib/XML/SAX/ExpatXS/Encoding.pm lib/XML/SAX/ExpatXS/Encodings/big5.enc lib/XML/SAX/ExpatXS/Encodings/euc-kr.enc lib/XML/SAX/ExpatXS/Encodings/iso-8859-2.enc lib/XML/SAX/ExpatXS/Encodings/iso-8859-3.enc lib/XML/SAX/ExpatXS/Encodings/iso-8859-4.enc lib/XML/SAX/ExpatXS/Encodings/iso-8859-5.enc lib/XML/SAX/ExpatXS/Encodings/iso-8859-7.enc lib/XML/SAX/ExpatXS/Encodings/iso-8859-8.enc lib/XML/SAX/ExpatXS/Encodings/iso-8859-9.enc lib/XML/SAX/ExpatXS/Encodings/windows-1250.enc lib/XML/SAX/ExpatXS/Encodings/windows-1252.enc lib/XML/SAX/ExpatXS/Encodings/x-euc-jp-jisx0221.enc lib/XML/SAX/ExpatXS/Encodings/x-euc-jp-unicode.enc lib/XML/SAX/ExpatXS/Encodings/x-sjis-cp932.enc lib/XML/SAX/ExpatXS/Encodings/x-sjis-jdk117.enc lib/XML/SAX/ExpatXS/Encodings/x-sjis-jisx0221.enc lib/XML/SAX/ExpatXS/Encodings/x-sjis-unicode.enc t/00basic.t t/01create.t t/02events.t t/03document.t t/04element.t t/05characters.t t/06p-i.t t/07comment.t t/08cdata.t t/09dtd.t t/10prefix.t t/11notation.t t/12xml-decl.t t/13errors.t t/14unparsed.t t/15locator.t t/16external.t t/17namespaces.t t/18file.t t/19internal.t t/20parameter.t t/21resolve-ent.t t/22encoding.t t/23el-decl.t t/24att-decl.t t/25locator2.t t/26rec-string.t t/27parse.t t/28dtd-resolve.t t/29source.t t/30skipped-ent.t t/50parse-uri.t t/51parse-file.t t/f01join-chars.t t/f02ns-attributes.t t/f03locator.t t/f04xmlns-uris.t t/f05xmlns-uris2.t t/f06ext-general.t t/f07ext-param.t t/f08expatversion.t t/f09noexpand.t t/external.xml t/file.xml t/file2.xml t/x01zero-bug.t typemap META.yml Module meta-data (added by MakeMaker) XML-SAX-ExpatXS-1.33/MANIFEST.SKIP000644 000765 000024 00000000164 11254652014 017103 0ustar00pcimprichstaff000000 000000 CVS/.* \.bak$ \.sw[a-z]$ \.tar$ \.tgz$ \.tar\.gz$ ^mess/ ^tmp/ ^blib/ ^Makefile$ ^Makefile\.[a-z]+$ ^pm_to_blib$ ~$ XML-SAX-ExpatXS-1.33/META.yml000644 000765 000024 00000001071 12042437703 016456 0ustar00pcimprichstaff000000 000000 --- #YAML:1.0 name: XML-SAX-ExpatXS version: 1.33 abstract: Perl SAX 2 XS extension to Expat parser author: - Petr Cimprich license: perl distribution_type: module configure_requires: ExtUtils::MakeMaker: 0 build_requires: ExtUtils::MakeMaker: 0 requires: XML::SAX: 0.96 no_index: directory: - t - inc generated_by: ExtUtils::MakeMaker version 6.56 meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 XML-SAX-ExpatXS-1.33/README000644 000765 000024 00000006144 11254652014 016071 0ustar00pcimprichstaff000000 000000 README file for Perl extension XML::SAX::ExpatXS ================================================ 1. Introduction 2. Dependencies 3. Installation 4. Callbacks 5. Encoding 1.Introduction ------------------------------ This module is a direct XS implementation of Perl SAX parser using Expat. XML::SAX::Expat is implemented as a layer over XML::Parser. The first version of this module has been created by Matt Sergeant reusing sources of XML::Parser. The current maintainer is Petr Cimprich . The wrapper is considered stable. Feedback of any kind is appreciated. 2. Dependencies ------------------------------ This module requires Expat XML parser. XML::SAX::ExpatXS 1.10 or higher requires Expat 1.95.4 or higher (because of XML_SetSkippedEntityHandler). For older Expat versions, it is recommended to use XML::SAX::ExpatXS 1.09. You can download Expat from: http://expat.sourceforge.net/ Required Perl modules are: XML::NamespaceSupport XML::SAX 3. Installation ------------------------------ perl Makefile.PL make make test make install You will need a C compiler to build this module from sources. Other option is to install a binary PPM package. Expat must be installed prior to building XML::SAX::ExpatXS. If expat is installed, but in a non-standard directory, then use the following options to Makefile.PL: EXPATLIBPATH=... To set the directory in which to find libexpat EXPATINCPATH=... To set the directory in which to find expat.h For example: perl Makefile.PL EXPATLIBPATH=/home/me/lib EXPATINCPATH=/home/me/include Note that if you build against a shareable library in a non-standard location you may (on some platforms) also have to set your LD_LIBRARY_PATH environment variable at run time for perl to find the library. On Windows, you have to set your PATH environment variable. 4. Callbacks ------------------------------ These Perl SAX callbacks are supported and tested: start_document() end_document() start_element() end_element() characters() processing_instruction() start_prefix_mapping() end_prefix_mapping() set_document_locator() fatal_error() comment() start_dtd() end_dtd() start_cdata() end_cdata() element_decl attribute_decl notation_decl() unparsed_entity_decl() external_entity_decl() internal_entity_decl() start_entity() end_entity () resolve_entity() skipped_entity() These methods are never called by XML::SAX::ExpatXS: warning() error() ignorable_whitespace() This one is deprecated but it works with XML::SAX::ExpatXS: xml_decl() 5. Encoding ------------------------------ These charsets and encodings are supported: UTF-8 (1) UTF-16 (1) US-ASCII (1) ISO-8859-1 (1) ISO-8859-2 (2) ISO-8859-3 (2) ISO-8859-4 (2) ISO-8859-5 (2) ISO-8859-7 (2) ISO-8859-8 (2) ISO-8859-9 (2) WINDOWS-1250 (2) WINDOWS-1252 (2) BIG5 (2) EUC-KR (2) EUC-JP (2,3) Shift JIS. (2,3) (1) Expat built-in (2) external handler (3) see lib/XML/SAX/ExpatXS/Encodings/Japanese_Encodings.msg Other encodings can be added with XML::Encoding, see lib/XML/SAX/ExpatXS/Encodings/README for more info. XML-SAX-ExpatXS-1.33/t/000755 000765 000024 00000000000 12042437703 015451 5ustar00pcimprichstaff000000 000000 XML-SAX-ExpatXS-1.33/typemap000644 000765 000024 00000001052 11254652014 016604 0ustar00pcimprichstaff000000 000000 # ##### XML::SAX::ExpatXS typemap # XML_Parser T_PTR Encinfo * T_ENCOBJ ################################################################ INPUT T_ENCOBJ if (sv_derived_from($arg, \"XML::SAX::ExpatXS::Encinfo\")) { IV tmp = SvIV((SV*)SvRV($arg)); $var = ($type) tmp; } else croak(\"$var is not of type XML::SAX::ExpatXS::Encinfo\") ################################################################ OUTPUT T_ENCOBJ if ($var) { sv_setref_pv($arg, \"XML::SAX::ExpatXS::Encinfo\", (void*)$var); } else $arg = &PL_sv_undef;XML-SAX-ExpatXS-1.33/t/00basic.t000644 000765 000024 00000000132 11254652013 017050 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } END { ok($loaded) } use XML::SAX::ExpatXS; $loaded++; XML-SAX-ExpatXS-1.33/t/01create.t000644 000765 000024 00000001110 11254652013 017230 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $parser = XML::SAX::ExpatXS->new( Handler => TestH->new(), ); ok($parser); $parser->parse_string("fffffggg"); $parser->parse_string(""); package TestH; #use Devel::Peek; sub new { bless {}, shift } sub characters { my ($self, $chars) = @_; #warn("Chars:\n"); #Dump($chars); } sub start_element { my ($self, $el) = @_; #warn("Start:\n"); #Dump($el); } sub end_element { my ($self, $el) = @_; #warn("End:\n"); #Dump($el); } XML-SAX-ExpatXS-1.33/t/02events.t000644 000765 000024 00000001717 11254652013 017307 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler, ); $parser->parse_string(""); #warn join(":", @{$handler->{events}}); ok(join(":", @{$handler->{events}}) eq '1:1:1:0:1'); package TestH; #use Devel::Peek; sub new { bless {events => [0,0,0,0,0]}, shift } sub characters { my ($self, $chars) = @_; $self->{events}->[3]++; #warn("Chars:\n"); #Dump($chars); } sub start_element { my ($self, $el) = @_; $self->{events}->[1]++; #warn("Start:\n"); #Dump($el); } sub end_element { my ($self, $el) = @_; $self->{events}->[2]++; #warn("End:\n"); #Dump($el); } sub xml_decl { my ($self, $el) = @_; $self->{events}->[4]++; #warn("XMLdecl:\n"); #Dump($el); } sub comment { my ($self, $el) = @_; $self->{events}->[0]++; #warn("Comment:\n"); #Dump($el); } XML-SAX-ExpatXS-1.33/t/03document.t000644 000765 000024 00000001107 11254652013 017613 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq 'start|end'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_document { my ($self, $doc) = @_; #warn("Start:\n"); #Dump($doc); $self->{data} .= 'start'; } sub end_document { my ($self, $doc) = @_; #warn("End:\n"); #Dump($doc); $self->{data} .= '|end'; } XML-SAX-ExpatXS-1.33/t/04element.t000644 000765 000024 00000003225 11254652013 017432 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq 'p1:foo|foo|ns1|p1|a1|a1|||v1|p2:a2|a2|ns2|p2|v2|p1:foo|foo|ns1|p1|'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_element { my ($self, $el) = @_; #warn("Start:\n"); #Dump($el); $self->{data} .= $el->{Name} . '|'; $self->{data} .= $el->{LocalName} . '|'; $self->{data} .= $el->{NamespaceURI} . '|'; $self->{data} .= $el->{Prefix} . '|'; $self->{data} .= $el->{Attributes}->{'{}a1'}->{Name} . '|'; $self->{data} .= $el->{Attributes}->{'{}a1'}->{LocalName} . '|'; $self->{data} .= $el->{Attributes}->{'{}a1'}->{NamespaceURI} . '|'; $self->{data} .= $el->{Attributes}->{'{}a1'}->{Prefix} . '|'; $self->{data} .= $el->{Attributes}->{'{}a1'}->{Value} . '|'; $self->{data} .= $el->{Attributes}->{'{ns2}a2'}->{Name} . '|'; $self->{data} .= $el->{Attributes}->{'{ns2}a2'}->{LocalName} . '|'; $self->{data} .= $el->{Attributes}->{'{ns2}a2'}->{NamespaceURI} . '|'; $self->{data} .= $el->{Attributes}->{'{ns2}a2'}->{Prefix} . '|'; $self->{data} .= $el->{Attributes}->{'{ns2}a2'}->{Value} . '|'; } sub end_element { my ($self, $el) = @_; #warn("End:\n"); #Dump($el); $self->{data} .= $el->{Name} . '|'; $self->{data} .= $el->{LocalName} . '|'; $self->{data} .= $el->{NamespaceURI} . '|'; $self->{data} .= $el->{Prefix} . '|'; } XML-SAX-ExpatXS-1.33/t/05characters.t000644 000765 000024 00000001050 11254652013 020113 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; abc d _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq 'abcd'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub characters { my ($self, $char) = @_; #warn("Char:$char->{Data}\n"); #Dump($char); $self->{data} .= $char->{Data} unless $char->{Data} =~ /^\s*$/; } XML-SAX-ExpatXS-1.33/t/06p-i.t000644 000765 000024 00000001142 11254652013 016464 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; abc _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq 'PItarget|PIdata and more data'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub processing_instruction { my ($self, $pi) = @_; #warn("PI:$pi->{Target}\n"); #Dump($pi); $self->{data} .= $pi->{Target} . '|'; $self->{data} .= $pi->{Data}; } XML-SAX-ExpatXS-1.33/t/07comment.t000644 000765 000024 00000001021 11254652013 017436 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; abc _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq ' comment text '); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub comment { my ($self, $com) = @_; #warn("Com:$com->{Data}\n"); #Dump($com); $self->{data} .= $com->{Data}; } XML-SAX-ExpatXS-1.33/t/08cdata.t000644 000765 000024 00000001415 11254652013 017060 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; ]]> _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq 'start||end'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_cdata { my ($self, $cd) = @_; #warn("StartCD:\n"); #Dump($cd); $self->{data} .= 'start|'; } sub end_cdata { my ($self, $cd) = @_; #warn("EndCD:\n"); #Dump($cd); $self->{data} .= '|end'; } sub characters { my ($self, $char) = @_; #warn("Char:$char->{Data}\n"); #Dump($char); $self->{data} .= $char->{Data} unless $char->{Data} =~ /^\s*$/; } XML-SAX-ExpatXS-1.33/t/09dtd.t000644 000765 000024 00000002161 11254652013 016557 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; hoo _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq '_sd_sdtd|html|-//W3C//DTD XHTML 1.0 Strict//EN|http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd_edtd_se'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); #Dump($el); $self->{data} .= '_sd'; } sub start_element { my ($self, $el) = @_; #warn("StartEl:\n"); #Dump($el); $self->{data} .= '_se'; } sub start_dtd { my ($self, $dtd) = @_; #warn("startDTD:\n"); #Dump($dtd); $self->{data} .= '_sdtd|' . $dtd->{Name}; $self->{data} .= '|' . $dtd->{PublicId}; $self->{data} .= '|' . $dtd->{SystemId}; } sub end_dtd { my ($self, $dtd) = @_; #warn("endDTD:\n"); #Dump($dtd); $self->{data} .= '_edtd'; } XML-SAX-ExpatXS-1.33/t/10prefix.t000644 000765 000024 00000002330 11254652013 017267 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; hoo _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq '_sd_spm||ns1_se_spm|p|ns2_se_ee_epm|p_ee_epm|_ed'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); #Dump($el); $self->{data} .= '_sd'; } sub end_document { my ($self, $doc) = @_; #warn("EndDoc:\n"); #Dump($el); $self->{data} .= '_ed'; } sub start_element { my ($self, $el) = @_; #warn("StartEl:\n"); #Dump($el); $self->{data} .= '_se'; } sub end_element { my ($self, $el) = @_; #warn("EndEl:\n"); #Dump($el); $self->{data} .= '_ee'; } sub start_prefix_mapping { my ($self, $map) = @_; #warn("StartPM:\n"); #Dump($map); $self->{data} .= '_spm|' . $map->{Prefix}; $self->{data} .= '|' . $map->{NamespaceURI}; } sub end_prefix_mapping { my ($self, $map) = @_; #warn("EndPM:\n"); #Dump($map); $self->{data} .= '_epm|' . $map->{Prefix}; } XML-SAX-ExpatXS-1.33/t/11notation.t000644 000765 000024 00000002346 11254652013 017635 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; ]> _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq '_sd_nd|n1Name|nPubId1|_nd|n2Name||nSysId2_nd|n3Name|nPubId3|nSysId3_se_ee_ed'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); #Dump($el); $self->{data} .= '_sd'; } sub end_document { my ($self, $doc) = @_; #warn("EndDoc:\n"); #Dump($el); $self->{data} .= '_ed'; } sub start_element { my ($self, $el) = @_; #warn("StartEl:\n"); #Dump($el); $self->{data} .= '_se'; } sub end_element { my ($self, $el) = @_; #warn("EndEl:\n"); #Dump($el); $self->{data} .= '_ee'; } sub notation_decl { my ($self, $not) = @_; #warn("NotDecl:\n"); #Dump($not); $self->{data} .= '_nd|' . $not->{Name}; $self->{data} .= '|' . $not->{PublicId}; $self->{data} .= '|' . $not->{SystemId}; } XML-SAX-ExpatXS-1.33/t/12xml-decl.t000644 000765 000024 00000001571 11254652013 017507 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq '_sd_xmld|1.0|utf-8|yes_se'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub xml_decl { my ($self, $decl) = @_; #warn("xmlDecl\n"); #Dump($decl); $self->{data} .= '_xmld|' . $decl->{Version}; $self->{data} .= '|' . $decl->{Encoding}; $self->{data} .= '|' . $decl->{Standalone}; } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); #Dump($el); $self->{data} .= '_sd'; } sub start_element { my ($self, $el) = @_; #warn("StartEl:\n"); #Dump($el); $self->{data} .= '_se'; } XML-SAX-ExpatXS-1.33/t/13errors.t000644 000765 000024 00000002656 11254652013 017324 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; _xml_ eval { $parser->parse_string($xml) }; #warn $handler->{data}; ok($handler->{data} eq '_ferr|not well-formed (invalid token) at line 4, column 9, byte 105|not well-formed (invalid token)|4|9||'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub warning { my ($self, $ex) = @_; #warn("Warn\n"); #Dump($ex); $self->{data} .= '_warn|' . $ex->{Message}; $self->{data} .= '|' . $ex->{Exception}; $self->{data} .= '|' . $ex->{LineNumber}; $self->{data} .= '|' . $ex->{ColumnNumber}; } sub error { my ($self, $ex) = @_; #warn("Error\n"); #Dump($ex); $self->{data} .= '_err|' . $ex->{Message}; $self->{data} .= '|' . $ex->{Exception}; $self->{data} .= '|' . $ex->{LineNumber}; $self->{data} .= '|' . $ex->{ColumnNumber}; } sub fatal_error { my ($self, $ex) = @_; #warn("fatError\n"); #Dump($ex); $self->{data} .= '_ferr|' . $ex->{Message}; $self->{data} .= '|' . $ex->{Exception}; $self->{data} .= '|' . $ex->{LineNumber}; $self->{data} .= '|' . $ex->{ColumnNumber}; $self->{data} .= '|' . $ex->{PublicId}; $self->{data} .= '|' . $ex->{SystemId}; } XML-SAX-ExpatXS-1.33/t/14unparsed.t000644 000765 000024 00000002650 11254652013 017624 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; ]> _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data}, '_sd_nd_ue|ueName1|uePubId|ueSysId|nName_ue|ueName2||ueSysId|nName_se_ee_ed'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); #Dump($el); $self->{data} .= '_sd'; } sub end_document { my ($self, $doc) = @_; #warn("EndDoc:\n"); #Dump($el); $self->{data} .= '_ed'; } sub start_element { my ($self, $el) = @_; #warn("StartEl:\n"); #Dump($el); $self->{data} .= '_se'; } sub end_element { my ($self, $el) = @_; #warn("EndEl:\n"); #Dump($el); $self->{data} .= '_ee'; } sub notation_decl { my ($self, $not) = @_; #warn("NotDecl:\n"); #Dump($not); $self->{data} .= '_nd'; } sub unparsed_entity_decl { my ($self, $ue) = @_; #warn("uEntDecl:\n"); #Dump($ue); $self->{data} .= '_ue|' . $ue->{Name}; $self->{data} .= '|' . $ue->{PublicId}; $self->{data} .= '|' . $ue->{SystemId}; $self->{data} .= '|' . $ue->{Notation}; } XML-SAX-ExpatXS-1.33/t/15locator.t000644 000765 000024 00000005602 11254652013 017447 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; koko _xml_ $parser->parse_string($xml); $parser->set_feature('http://xmlns.perl.org/sax/join-character-data',0); $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq '_setDL|1|1|_sd|1|1|_se|3|5|_ch|4|2|_sm|4|26|_se|4|26|_ch|4|30|_ee|4|36|_em|4|36|_ch|5|2|_pi|5|21|_ch|5|22|_ee|6|6|_ed|6|7|utf-8|1.0||_setDL|1|1|_sd|1|1|_se|3|5|_ch|3|6|_ch|4|2|_sm|4|26|_se|4|26|_ch|4|30|_ee|4|36|_em|4|36|_ch|4|37|_ch|5|2|_pi|5|21|_ch|5|22|_ee|6|6|_ed|6|7|utf-8|1.0||'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub set_document_locator { my ($self, $loc) = @_; #warn("setDocLoc\n"); #Dump($loc); $self->{Locator} = $loc; $self->{data} .= '_setDL|' . $loc->{LineNumber}; $self->{data} .= '|' . $loc->{ColumnNumber}; } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); $self->{data} .= '|_sd|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } sub end_document { my ($self, $doc) = @_; #warn("EndDoc:\n"); #Dump($self->{Locator}); $self->{data} .= '|_ed|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; $self->{data} .= '|' . $self->{Locator}->{Encoding}; $self->{data} .= '|' . $self->{Locator}->{XMLVersion}; $self->{data} .= '|' . $self->{Locator}->{PublicId}; $self->{data} .= '|' . $self->{Locator}->{SystemId}; } sub start_element { my ($self, $el) = @_; #warn("StartEl:\n"); $self->{data} .= '|_se|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } sub end_element { my ($self, $el) = @_; #warn("EndEl:\n"); $self->{data} .= '|_ee|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } sub characters { my ($self, $char) = @_; #warn("char:\n"); $self->{data} .= '|_ch|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } sub start_prefix_mapping { my ($self, $map) = @_; #warn("StartPM:\n"); $self->{data} .= '|_sm|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } sub end_prefix_mapping { my ($self, $map) = @_; #warn("EndPM:\n"); $self->{data} .= '|_em|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } sub processing_instruction { my ($self, $pi) = @_; #warn("PI:\n"); $self->{data} .= '|_pi|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } XML-SAX-ExpatXS-1.33/t/16external.t000644 000765 000024 00000003360 11254652013 017626 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; ]> &external; _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data}, '_sD_sDtd_eDec(external,extPubID,t/external.xml)_eDtd_sE(root)_sEnt(external)_sE(boo)_eE_eEnt(external)_eE_eD'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); #Dump($el); $self->{data} .= '_sD'; } sub end_document { my ($self, $doc) = @_; #warn("EndDoc:\n"); #Dump($el); $self->{data} .= '_eD'; } sub start_element { my ($self, $el) = @_; #warn("StartEl:\n"); #Dump($el); $self->{data} .= "_sE($el->{Name})"; } sub end_element { my ($self, $el) = @_; #warn("EndEl:\n"); #Dump($el); $self->{data} .= '_eE'; } sub start_dtd { my ($self, $dtd) = @_; #warn("StartDTD:\n"); #Dump($el); $self->{data} .= '_sDtd'; } sub end_dtd { my ($self, $dtd) = @_; #warn("EndDTD:\n"); #Dump($dtd); $self->{data} .= '_eDtd'; } sub external_entity_decl { my ($self, $ent) = @_; #warn("ExtEntDecl:$ent->{Name}\n"); #Dump($ent); $self->{data} .= "_eDec($ent->{Name},$ent->{PublicId},$ent->{SystemId})"; } sub start_entity { my ($self, $ent) = @_; #warn("StartEnt:$ent->{Name}\n"); #Dump($ent); $self->{data} .= "_sEnt($ent->{Name})"; } sub end_entity { my ($self, $ent) = @_; #warn("EndEnt:$ent->{Name}\n"); #Dump($ent); $self->{data} .= "_eEnt($ent->{Name})"; } XML-SAX-ExpatXS-1.33/t/17namespaces.t000644 000765 000024 00000002337 11254652013 020127 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq 'sP(:nsDef)sE(nsDef:foo)sP(p:nsP1)sE(nsP1:boo)sP(:)sE(:hoo)sP(p:nsP2)sE(nsP2:woo)eE(nsP2:woo)eP(p)eE(:hoo)eP()eE(nsP1:boo)eP(p)eE(nsDef:foo)eP()'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_element { my ($self, $el) = @_; #warn("Start:$el->{Name}\n"); #Dump($el); $self->{data} .= "sE($el->{NamespaceURI}:$el->{LocalName})"; } sub end_element { my ($self, $el) = @_; #warn("End:$el->{Name}\n"); #Dump($el); $self->{data} .= "eE($el->{NamespaceURI}:$el->{LocalName})"; } sub start_prefix_mapping { my ($self, $map) = @_; #warn("sPref:$map->{Prefix}\n"); #Dump($map); $self->{data} .= "sP($map->{Prefix}:$map->{NamespaceURI})"; } sub end_prefix_mapping { my ($self, $map) = @_; #warn("ePref:$map->{Prefix}\n"); #Dump($map); $self->{data} .= "eP($map->{Prefix})"; } XML-SAX-ExpatXS-1.33/t/18file.t000644 000765 000024 00000001130 11254652013 016716 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 2 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); $parser->parse_uri('t/file.xml'); #warn "$handler->{start}:$handler->{end}"; ok($handler->{start}, 72); ok($handler->{end}, 72); package TestH; #use Devel::Peek; sub new { bless {start => 0, end => 0}, shift } sub start_element { my ($self, $el) = @_; #warn("Start:$el->{Name}\n"); #Dump($el); $self->{start}++; } sub end_element { my ($self, $el) = @_; #warn("End:$el->{Name}\n"); #Dump($el); $self->{end}++; } XML-SAX-ExpatXS-1.33/t/19internal.t000644 000765 000024 00000003066 11536165505 017636 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; ]> &internal; _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq '_sD_sDtd_iDec(internal,int_entity_value)_eDtd_sE(root)_ch(Nint_entity_valueN)_eE_eD'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); #Dump($el); $self->{data} .= '_sD'; } sub end_document { my ($self, $doc) = @_; #warn("EndDoc:\n"); #Dump($el); $self->{data} .= '_eD'; } sub start_element { my ($self, $el) = @_; #warn("StartEl:\n"); #Dump($el); $self->{data} .= "_sE($el->{Name})"; } sub end_element { my ($self, $el) = @_; #warn("EndEl:\n"); #Dump($el); $self->{data} .= '_eE'; } sub start_dtd { my ($self, $dtd) = @_; #warn("StartDTD:\n"); #Dump($el); $self->{data} .= '_sDtd'; } sub end_dtd { my ($self, $dtd) = @_; #warn("EndDTD:\n"); #Dump($dtd); $self->{data} .= '_eDtd'; } sub internal_entity_decl { my ($self, $ent) = @_; #warn("IntEntDecl:$ent->{Name}\n"); #Dump($ent); $self->{data} .= "_iDec($ent->{Name},$ent->{Value})"; } sub characters { my ($self, $ch) = @_; $ch->{Data} =~ s/\n/N/g; #warn("Char:$ch->{Data}\n"); #Dump($ch); $self->{data} .= "_ch($ch->{Data})"; } XML-SAX-ExpatXS-1.33/t/20parameter.t000644 000765 000024 00000003427 11254652013 017763 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; ]> _xml_ $parser->parse_string($xml); #warn "$handler->{data}"; ok($handler->{data} eq '_sD_sDtd_iDec(%par,par_entity_value)_iDec(int,int_entity_value)_eDtd_sE(root)_eE_eD'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); #Dump($doc); $self->{data} .= '_sD'; } sub end_document { my ($self, $doc) = @_; #warn("EndDoc:\n"); #Dump($doc); $self->{data} .= '_eD'; } sub start_element { my ($self, $el) = @_; #warn("StartEl:\n"); #Dump($el); $self->{data} .= "_sE($el->{Name})"; } sub end_element { my ($self, $el) = @_; #warn("EndEl:\n"); #Dump($el); $self->{data} .= '_eE'; } sub start_dtd { my ($self, $dtd) = @_; #warn("StartDTD:\n"); #Dump($el); $self->{data} .= '_sDtd'; } sub end_dtd { my ($self, $dtd) = @_; #warn("EndDTD:\n"); #Dump($dtd); $self->{data} .= '_eDtd'; } sub external_entity_decl { my ($self, $ent) = @_; #warn("ExtEntDecl:$ent->{Name}\n"); #Dump($ent); $self->{data} .= "_eDec($ent->{Name},$ent->{PublicId},$ent->{SystemId})"; } sub internal_entity_decl { my ($self, $ent) = @_; #warn("IntEntDecl:$ent->{Name},$ent->{Value}\n"); #Dump($ent); $self->{data} .= "_iDec($ent->{Name},$ent->{Value})"; } sub characters { my ($self, $ch) = @_; $ch->{Data} =~ s/\n/N/g; #warn("Char:$ch->{Data}\n"); #Dump($ch); $self->{data} .= "_ch($ch->{Data})"; } XML-SAX-ExpatXS-1.33/t/21resolve-ent.t000644 000765 000024 00000004004 11254652013 020237 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; ]> &external; _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq '_sD_sDtd_eDec(external,,TEST:external)_eDtd_sE(root)_sEnt(external)_rE(t/external.xml)_sE(boo)_eE_eEnt(external)_eE_eD'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub resolve_entity { my ($self, $ent) = @_; #warn("resEnt:$ent->{SystemId}\n"); if ($ent->{SystemId} =~ s/^TEST:/t\//) {$ent->{SystemId} .= '.xml';} $self->{data} .= "_rE($ent->{SystemId})"; return {SystemId => $ent->{SystemId}}; } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); #Dump($el); $self->{data} .= '_sD'; } sub end_document { my ($self, $doc) = @_; #warn("EndDoc:\n"); #Dump($el); $self->{data} .= '_eD'; } sub start_element { my ($self, $el) = @_; #warn("StartEl:$el->{Name}\n"); #Dump($el); $self->{data} .= "_sE($el->{Name})"; } sub end_element { my ($self, $el) = @_; #warn("EndEl:$el->{Name}\n"); #Dump($el); $self->{data} .= '_eE'; } sub start_dtd { my ($self, $dtd) = @_; #warn("StartDTD:\n"); #Dump($el); $self->{data} .= '_sDtd'; } sub end_dtd { my ($self, $dtd) = @_; #warn("EndDTD:\n"); #Dump($dtd); $self->{data} .= '_eDtd'; } sub external_entity_decl { my ($self, $ent) = @_; #warn("ExtEntDecl:$ent->{Name}\n"); #Dump($ent); $self->{data} .= "_eDec($ent->{Name},$ent->{PublicId},$ent->{SystemId})"; } sub start_entity { my ($self, $ent) = @_; #warn("StartEnt:$ent->{Name}\n"); #Dump($ent); $self->{data} .= "_sEnt($ent->{Name})"; } sub end_entity { my ($self, $ent) = @_; #warn("EndEnt:$ent->{Name}\n"); #Dump($ent); $self->{data} .= "_eEnt($ent->{Name})"; } XML-SAX-ExpatXS-1.33/t/22encoding.t000644 000765 000024 00000001276 11254652013 017573 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); $parser->parse_uri('t/file2.xml'); #warn "$handler->{start}:$handler->{end}"; ok($handler->{start} == 26 and $handler->{end} == 26); package TestH; #use Devel::Peek; sub new { bless {start => 0, end => 0}, shift } sub start_element { my ($self, $el) = @_; #warn("Start:$el->{Name}\n"); #Dump($el); $self->{start}++; } sub end_element { my ($self, $el) = @_; #warn("End:$el->{Name}\n"); #Dump($el); $self->{end}++; } sub characters { my ($self, $char) = @_; #warn("Char:$char->{Data}\n"); #Dump($el); } XML-SAX-ExpatXS-1.33/t/23el-decl.t000644 000765 000024 00000001657 11254652013 017316 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; ]> text _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq '_sdtd|html_ed|foo:(boo|hoo)*_ed|boo:(#PCDATA)*_ed|hoo:EMPTY_edtd'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_dtd { my ($self, $dtd) = @_; #warn("startDTD:\n"); #Dump($dtd); $self->{data} .= '_sdtd|' . $dtd->{Name}; } sub end_dtd { my ($self, $dtd) = @_; #warn("endDTD:\n"); #Dump($dtd); $self->{data} .= '_edtd'; } sub element_decl { my ($self, $ed) = @_; #warn("elDecl:$ed->{Name},$ed->{Model}\n"); #Dump($ed); $self->{data} .= "_ed|$ed->{Name}:$ed->{Model}"; } XML-SAX-ExpatXS-1.33/t/24att-decl.t000644 000765 000024 00000002543 11254652013 017502 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; ]> text _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq '_sdtd|html_ad|foo:id:ID:#REQUIRED_ad|foo:type:(small|medium|big):medium_ad|boo:method:CDATA:#FIXED:POST_edtd'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_dtd { my ($self, $dtd) = @_; #warn("startDTD:\n"); #Dump($dtd); $self->{data} .= '_sdtd|' . $dtd->{Name}; } sub end_dtd { my ($self, $dtd) = @_; #warn("endDTD:\n"); #Dump($dtd); $self->{data} .= '_edtd'; } sub attribute_decl { my ($self, $ad) = @_; #warn("atDecl:$ad->{eName},$ad->{aName},$ad->{Type},$ad->{Mode},$ad->{Value}\n"); #Dump($ad); $self->{data} .= "_ad|$ad->{eName}:$ad->{aName}"; $self->{data} .= ":$ad->{Type}" if defined $ad->{Type}; $self->{data} .= ":$ad->{Mode}" if defined $ad->{Mode}; $self->{data} .= ":$ad->{Value}" if defined $ad->{Value}; } XML-SAX-ExpatXS-1.33/t/25locator2.t000644 000765 000024 00000005630 11254652013 017533 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; koko mato roto pedo _xml_ $parser->parse_string($xml); $parser->set_feature('http://xmlns.perl.org/sax/join-character-data',0); $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq '_setDL|1|1|_sd|1|1|_se|2|5|_ch|3|2|_se|4|19|_ch|7|2|_ee|7|8|_ch|8|2|_se|8|8|_ee|8|8|_ch|8|9|_ee|9|6|_ed|9|7|iso-8859-2|1.0||_setDL|1|1|_sd|1|1|_se|2|5|_ch|2|6|_ch|3|2|_se|4|19|_ch|4|20|_ch|5|13|_ch|5|14|_ch|6|13|_ch|6|14|_ch|7|2|_ee|7|8|_ch|7|9|_ch|8|2|_se|8|8|_ee|8|8|_ch|8|9|_ee|9|6|_ed|9|7|iso-8859-2|1.0||'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub set_document_locator { my ($self, $loc) = @_; #warn("setDocLoc\n"); #Dump($loc); $self->{Locator} = $loc; $self->{data} .= '_setDL|' . $loc->{LineNumber}; $self->{data} .= '|' . $loc->{ColumnNumber}; } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); $self->{data} .= '|_sd|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } sub end_document { my ($self, $doc) = @_; #warn("EndDoc:\n"); #Dump($self->{Locator}); $self->{data} .= '|_ed|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; $self->{data} .= '|' . $self->{Locator}->{Encoding}; $self->{data} .= '|' . $self->{Locator}->{XMLVersion}; $self->{data} .= '|' . $self->{Locator}->{PublicId}; $self->{data} .= '|' . $self->{Locator}->{SystemId}; } sub start_element { my ($self, $el) = @_; #warn("StartEl:\n"); $self->{data} .= '|_se|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } sub end_element { my ($self, $el) = @_; #warn("EndEl:\n"); $self->{data} .= '|_ee|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } sub characters { my ($self, $char) = @_; #warn("char:\n"); $self->{data} .= '|_ch|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } sub start_prefix_mapping { my ($self, $map) = @_; #warn("StartPM:\n"); $self->{data} .= '|_sm|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } sub end_prefix_mapping { my ($self, $map) = @_; #warn("EndPM:\n"); $self->{data} .= '|_em|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } sub processing_instruction { my ($self, $pi) = @_; #warn("PI:\n"); $self->{data} .= '|_pi|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } XML-SAX-ExpatXS-1.33/t/26rec-string.t000644 000765 000024 00000003250 11254652013 020060 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); $handler->{Parser} = $parser; my $xml =<<_xml_; koko mato roto pedo _xml_ $parser->set_feature('http://xmlns.perl.org/sax/join-character-data',1); $parser->set_feature('http://xmlns.perl.org/sax/recstring',1); $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq '|_sd||_se||_ch| |_se||_ch| koko mato roto pedo |_ee||_ch| |_se||_ee||_ch||_ee||_ed|'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_document { my ($self, $doc) = @_; my $str = ${$self->{Parser}->{ParseOptions}->{RecognizedString}}; #warn("StartDoc:$str\n"); $self->{data} .= '|_sd|' . $str; } sub end_document { my ($self, $doc) = @_; my $str = ${$self->{Parser}->{ParseOptions}->{RecognizedString}}; #warn("EndDoc:$str\n"); $self->{data} .= '|_ed|' . $str; $self->{data} =~ s/\n//g; $self->{data} =~ s/(\s+)/ /g; } sub start_element { my ($self, $el) = @_; my $str = ${$self->{Parser}->{ParseOptions}->{RecognizedString}}; #warn("StartEl:$str\n"); $self->{data} .= '|_se|' . $str; } sub end_element { my ($self, $el) = @_; my $str = ${$self->{Parser}->{ParseOptions}->{RecognizedString}}; #warn("EndEl:$str\n"); $self->{data} .= '|_ee|' . $str; } sub characters { my ($self, $char) = @_; my $str = ${$self->{Parser}->{ParseOptions}->{RecognizedString}}; #warn("Char:$str\n"); $self->{data} .= '|_ch|' . $str; } XML-SAX-ExpatXS-1.33/t/27parse.t000644 000765 000024 00000003640 11254652013 017121 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler, Source => { SystemId => 't/file.xml', PublicId => 'XML::SAX::ExpatXS/test1', Encoding => 'ISO-8859-1', } ); $parser->parse(); #warn $handler->{data}; ok($handler->{data} eq '_setDL|t/file.xml|XML::SAX::ExpatXS/test1|ISO-8859-1+_sd|t/file.xml|XML::SAX::ExpatXS/test1|ISO-8859-1+_se|t/file.xml|XML::SAX::ExpatXS/test1|ISO-8859-1+_ed|t/file.xml|XML::SAX::ExpatXS/test1|ISO-8859-1+'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub set_document_locator { my ($self, $loc) = @_; $self->{Locator} = $loc; #warn("setDocLoc\n"); $self->{data} .= '_setDL|' . $self->{Locator}->{SystemId}; $self->{data} .= '|' . $self->{Locator}->{PublicId}; $self->{data} .= '|' . $self->{Locator}->{Encoding} . '+'; $self->{done} = 0; } sub start_document { my ($self, $doc) = @_; #warn("StartDoc\n"); $self->{data} .= '_sd|' . $self->{Locator}->{SystemId}; $self->{data} .= '|' . $self->{Locator}->{PublicId}; $self->{data} .= '|' . $self->{Locator}->{Encoding} . '+'; } sub end_document { my ($self, $doc) = @_; #warn("EndDoc\n"); $self->{data} .= '_ed|' . $self->{Locator}->{SystemId}; $self->{data} .= '|' . $self->{Locator}->{PublicId}; $self->{data} .= '|' . $self->{Locator}->{Encoding} . '+'; } sub start_element { my ($self, $el) = @_; #warn("StartEl\n"); unless ($self->{done}) { $self->{data} .= '_se|' . $self->{Locator}->{SystemId}; $self->{data} .= '|' . $self->{Locator}->{PublicId}; $self->{data} .= '|' . $self->{Locator}->{Encoding} . '+'; $self->{done} = 1; } } XML-SAX-ExpatXS-1.33/t/28dtd-resolve.t000644 000765 000024 00000003050 11254652013 020233 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler, ParseParamEnt => 1 ); my $xml =<<_xml_; _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data}, '_sd_sdtd|html|pub|virtual.dtd_sent|[dtd]_eent_edtd_se_char|value_ee'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); $self->{data} .= '_sd'; } sub start_element { my ($self, $el) = @_; #warn("StartEl:\n"); $self->{data} .= '_se'; } sub end_element { my ($self, $el) = @_; #warn("EndEl:\n"); $self->{data} .= '_ee'; } sub start_dtd { my ($self, $dtd) = @_; #warn("startDTD:\n"); $self->{data} .= '_sdtd|' . $dtd->{Name}; $self->{data} .= '|' . $dtd->{PublicId}; $self->{data} .= '|' . $dtd->{SystemId}; } sub end_dtd { my ($self, $dtd) = @_; #warn("endDTD:\n"); $self->{data} .= '_edtd'; } sub start_entity { my ($self, $ent) = @_; #warn("startEnt:$ent->{Name}\n"); $self->{data} .= '_sent|' . $ent->{Name}; } sub end_entity { my ($self, $ent) = @_; #warn("endEnt:\n"); $self->{data} .= '_eent'; } sub resolve_entity { my ($self, $ent) = @_; #warn("resolveEnt:\n"); return {String => ''}; } sub characters { my ($self, $char) = @_; #warn("Char:$char->{Data}\n"); $self->{data} .= '_char|' . $char->{Data}; } XML-SAX-ExpatXS-1.33/t/29source.t000644 000765 000024 00000002264 11254652013 017312 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $source = { PublicId => undef, SystemId => 't/file.xml', Encoding => 'iso-8859-2', }; my $parser = XML::SAX::ExpatXS->new( Handler => $handler, Source => $source ); $parser->parse(); #warn "$handler->{enc}\n"; ok($handler->{enc} eq 'iso-8859-2|iso-8859-2|iso-8859-1|iso-8859-2|iso-8859-2'); package TestH; #use Devel::Peek; sub new { bless {start => 0, end => 0}, shift } sub set_document_locator { my ($self, $loc) = @_; $self->{loc} = $loc; #warn("LocEncoding:$self->{loc}{Encoding}\n"); $self->{enc} .= $self->{loc}{Encoding} . '|'; } sub start_document { my ($self, $doc) = @_; #warn("StartEncoding:$self->{loc}{Encoding}\n"); $self->{enc} .= $self->{loc}{Encoding} . '|'; } sub end_document { my ($self, $doc) = @_; #warn("EndEncoding:$self->{loc}{Encoding}\n"); $self->{enc} .= $self->{loc}{Encoding}; } sub xml_decl { my ($self, $decl) = @_; #warn("DeclEncoding:$decl->{Encoding}\n"); #warn("DecLocEncoding:$self->{loc}{Encoding}\n"); $self->{enc} .= $decl->{Encoding} . '|'; $self->{enc} .= $self->{loc}{Encoding} . '|'; } XML-SAX-ExpatXS-1.33/t/30skipped-ent.t000644 000765 000024 00000007542 11254652013 020231 0ustar00pcimprichstaff000000 000000 # Provided by Axel Eckenberger, Nov 3, 2005 use Test; BEGIN { plan tests => 4 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler); my $xml =<<_xml_; ]> ∫&ext; _xml_ ###################### Test 1 ###################### # Tests the default settings # Note: _skip|int occurs as dtd is not parsed $handler->{data} = ''; $parser->set_feature('http://xml.org/sax/features/external-parameter-entities', 0); # = default $parser->set_feature('http://xml.org/sax/features/external-general-entities' , 1); # = default $parser->parse_string($xml); ok($handler->{data}, '_sd_sdtd|html|pub|virtual.dtd_skip|[dtd]_edtd_se_skip|int_sent|ext_eent_char|external_ee'); ###################### Test 2 ###################### # Tests turning the parsing of the parameter enties # on. $handler->{data} = ''; $parser->set_feature('http://xml.org/sax/features/external-parameter-entities', 1); $parser->set_feature('http://xml.org/sax/features/external-general-entities' , 1); $parser->parse_string($xml); ok($handler->{data}, '_sd_sdtd|html|pub|virtual.dtd_sent|[dtd]_eent_edtd_se_char|value_sent|ext_eent_char|external_ee'); ###################### Test 3 ###################### # Tests turning the parsing of external general # entities off. $handler->{data} = ''; $parser->set_feature('http://xml.org/sax/features/external-parameter-entities', 1); $parser->set_feature('http://xml.org/sax/features/external-general-entities' , 0); $parser->parse_string($xml); ok($handler->{data}, '_sd_sdtd|html|pub|virtual.dtd_sent|[dtd]_eent_edtd_se_char|value_skip|ext_ee'); ###################### Test 3 ###################### # Tests skipping all entities except parameter # entities, i.e. skips both internal and external # general entities event when they are declared # or not. $handler->{data} = ''; $parser->set_feature('http://xml.org/sax/features/external-parameter-entities', 1); $parser->set_feature('http://xml.org/sax/features/external-general-entities' , 0); $parser->parse_string($xml, NoExpand => 1); ok($handler->{data}, '_sd_sdtd|html|pub|virtual.dtd_sent|[dtd]_eent_edtd_se_skip|int_skip|ext_ee'); print '_sd_sdtd|html|pub|virtual.dtd_sent|[dtd]_eent_edtd_se_skip|int_skip|ext_ee', "\n"; print $handler->{data}, "\n"; package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); $self->{data} .= '_sd'; } sub start_element { my ($self, $el) = @_; #warn("StartEl:\n"); $self->{data} .= '_se'; } sub end_element { my ($self, $el) = @_; #warn("EndEl:\n"); $self->{data} .= '_ee'; } sub start_dtd { my ($self, $dtd) = @_; #warn("startDTD:\n"); $self->{data} .= '_sdtd|' . $dtd->{Name}; $self->{data} .= '|' . $dtd->{PublicId}; $self->{data} .= '|' . $dtd->{SystemId}; } sub end_dtd { my ($self, $dtd) = @_; #warn("endDTD:\n"); $self->{data} .= '_edtd'; } sub start_entity { my ($self, $ent) = @_; #warn("startEnt:$ent->{Name}\n"); $self->{data} .= '_sent|' . $ent->{Name}; } sub end_entity { my ($self, $ent) = @_; #warn("endEnt:\n"); $self->{data} .= '_eent'; } sub resolve_entity { my ($self, $ent) = @_; #warn("resolveEnt:\n"); return {String => ''} if ($ent->{PublicId} eq "pub"); return {String => 'external'} if ($ent->{PublicId} eq "ext"); return undef; } sub characters { my ($self, $char) = @_; #warn("Char:$char->{Data}\n"); $self->{data} .= '_char|' . $char->{Data}; } sub skipped_entity { my ($self, $ent) = @_; #warn("skippedEnt:$ent->{Name}\n"); $self->{data} .= '_skip|' . $ent->{Name}; } XML-SAX-ExpatXS-1.33/t/50parse-uri.t000644 000765 000024 00000003213 11254652013 017706 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); $parser->parse_uri('t/file.xml'); $parser->parse_uri('t/file2.xml'); #warn $handler->{data}; ok($handler->{data} eq '_setDL|t/file.xml||+_sd|t/file.xml||+_se|t/file.xml||iso-8859-1+_ed|t/file.xml||iso-8859-1+_setDL|t/file2.xml||+_sd|t/file2.xml||+_se|t/file2.xml||ISO-8859-2+_ed|t/file2.xml||ISO-8859-2+'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub set_document_locator { my ($self, $loc) = @_; $self->{Locator} = $loc; #warn("setDocLoc\n"); $self->{data} .= '_setDL|' . $self->{Locator}->{SystemId}; $self->{data} .= '|' . $self->{Locator}->{PublicId}; $self->{data} .= '|' . $self->{Locator}->{Encoding} . '+'; $self->{done} = 0; } sub start_document { my ($self, $doc) = @_; #warn("StartDoc\n"); $self->{data} .= '_sd|' . $self->{Locator}->{SystemId}; $self->{data} .= '|' . $self->{Locator}->{PublicId}; $self->{data} .= '|' . $self->{Locator}->{Encoding} . '+'; } sub end_document { my ($self, $doc) = @_; #warn("EndDoc\n"); $self->{data} .= '_ed|' . $self->{Locator}->{SystemId}; $self->{data} .= '|' . $self->{Locator}->{PublicId}; $self->{data} .= '|' . $self->{Locator}->{Encoding} . '+'; } sub start_element { my ($self, $el) = @_; #warn("StartEl\n"); unless ($self->{done}) { $self->{data} .= '_se|' . $self->{Locator}->{SystemId}; $self->{data} .= '|' . $self->{Locator}->{PublicId}; $self->{data} .= '|' . $self->{Locator}->{Encoding} . '+'; $self->{done} = 1; } } XML-SAX-ExpatXS-1.33/t/51parse-file.t000644 000765 000024 00000001175 11254652013 020034 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 2 } use XML::SAX::ExpatXS; use IO::File; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $file = IO::File->new('t/file.xml'); $parser->parse_file($file); #warn "$handler->{start}:$handler->{end}"; ok($handler->{start}, 72); ok($handler->{end}, 72); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_element { my ($self, $el) = @_; #warn("Start:$el->{Name}\n"); #Dump($el); $self->{start}++; } sub end_element { my ($self, $el) = @_; #warn("End:$el->{Name}\n"); #Dump($el); $self->{end}++; } XML-SAX-ExpatXS-1.33/t/external.xml000644 000765 000024 00000000067 11254652013 020015 0ustar00pcimprichstaff000000 000000 text XML-SAX-ExpatXS-1.33/t/f01join-chars.t000644 000765 000024 00000002244 11254652013 020201 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; data1 data2 data3 data4 data5 _xml_ $parser->parse_string($xml); $parser->set_feature('http://xmlns.perl.org/sax/join-character-data', 0); $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq 'ch(data1N )ch(data2N data3N )ch(data4)ch(N )ch(N data5N)ch(data1)ch(N)ch( )ch(data2)ch(N)ch( data3)ch(N)ch( )ch(data4)ch(N)ch( )ch(N)ch( data5)ch(N)'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_element { my ($self, $el) = @_; #warn("Start:$el->{Name}\n"); #Dump($el); #$self->{data} .= "sE($el->{NamespaceURI}:$el->{LocalName})"; } sub end_element { my ($self, $el) = @_; #warn("End:$el->{Name}\n"); #Dump($el); #$self->{data} .= "eE($el->{NamespaceURI}:$el->{LocalName})"; } sub characters { my ($self, $char) = @_; $char->{Data} =~ s/\n/N/g; #warn("char:$char->{Data}\n"); #Dump($char); $self->{data} .= "ch($char->{Data})"; } XML-SAX-ExpatXS-1.33/t/f02ns-attributes.t000644 000765 000024 00000002313 11254652013 020746 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; _xml_ $parser->parse_string($xml); $parser->set_feature('http://xmlns.perl.org/sax/ns-attributes', 0); $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq 'foo({}id/{}xmlns)p:boo({http://www.w3.org/2000/xmlns/}p/{}id)foo({}id)p:boo({}id)'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_element { my ($self, $el) = @_; #warn("Start:$el->{Name}:$el->{Attributes}\n"); #Dump($el); $atts = join('/', sort keys %{$el->{Attributes}}); $self->{data} .= "$el->{Name}($atts)"; } sub end_element { my ($self, $el) = @_; #warn("End:$el->{Name}\n"); #Dump($el); } sub start_prefix_mapping { my ($self, $map) = @_; #warn("sPref:$map->{Prefix}\n"); #Dump($map); #$self->{data} .= "sP($map->{Prefix}:$map->{NamespaceURI})"; } sub end_prefix_mapping { my ($self, $map) = @_; #warn("ePref:$map->{Prefix}\n"); #Dump($map); #$self->{data} .= "eP($map->{Prefix})"; } XML-SAX-ExpatXS-1.33/t/f03locator.t000644 000765 000024 00000004143 11254652013 017611 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; koko _xml_ $parser->parse_string($xml); $parser->set_feature('http://xmlns.perl.org/sax/locator',0); $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq '_setDL|1|1|_sd|1|1|_se|2|5|_ch|3|2|_se|3|7|_ch|3|11|_ee|3|17|_ch|3|18|_ee|4|6|_ed|4|7|utf-8|1.0||_setDL|1|1|_sd|1|1|_se|1|22|_ch|1|22|_se|1|22|_ch|1|22|_ee|1|22|_ch|1|22|_ee|1|22|_ed|4|7|utf-8|1.0||'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub set_document_locator { my ($self, $loc) = @_; #warn("setDocLoc\n"); #Dump($loc); $self->{Locator} = $loc; $self->{data} .= '_setDL|' . $loc->{LineNumber}; $self->{data} .= '|' . $loc->{ColumnNumber}; } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); $self->{data} .= '|_sd|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } sub end_document { my ($self, $doc) = @_; #warn("EndDoc:\n"); #Dump($self->{Locator}); $self->{data} .= '|_ed|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; $self->{data} .= '|' . $self->{Locator}->{Encoding}; $self->{data} .= '|' . $self->{Locator}->{XMLVersion}; $self->{data} .= '|' . $self->{Locator}->{PublicId}; $self->{data} .= '|' . $self->{Locator}->{SystemId}; } sub start_element { my ($self, $el) = @_; #warn("StartEl:\n"); $self->{data} .= '|_se|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } sub end_element { my ($self, $el) = @_; #warn("EndEl:\n"); $self->{data} .= '|_ee|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } sub characters { my ($self, $char) = @_; #warn("char:\n"); $self->{data} .= '|_ch|' . $self->{Locator}->{LineNumber}; $self->{data} .= '|' . $self->{Locator}->{ColumnNumber}; } XML-SAX-ExpatXS-1.33/t/f04xmlns-uris.t000644 000765 000024 00000002464 11254652013 020274 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; _xml_ $parser->set_feature('http://xmlns.perl.org/sax/xmlns-uris', 0); $parser->parse_string($xml); $parser->set_feature('http://xml.org/sax/features/xmlns-uris', 1); $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq 'foo({}id/{}xmlns)p:boo({}id/{}p)foo({http://www.w3.org/2000/xmlns/}xmlns/{}id)p:boo({http://www.w3.org/2000/xmlns/}p/{}id)'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_element { my ($self, $el) = @_; #warn("Start:$el->{Name}:$el->{Attributes}\n"); #Dump($el); $atts = join('/', sort keys %{$el->{Attributes}}); $self->{data} .= "$el->{Name}($atts)"; } sub end_element { my ($self, $el) = @_; #warn("End:$el->{Name}\n"); #Dump($el); } sub start_prefix_mapping { my ($self, $map) = @_; #warn("sPref:$map->{Prefix}\n"); #Dump($map); #$self->{data} .= "sP($map->{Prefix}:$map->{NamespaceURI})"; } sub end_prefix_mapping { my ($self, $map) = @_; #warn("ePref:$map->{Prefix}\n"); #Dump($map); #$self->{data} .= "eP($map->{Prefix})"; } XML-SAX-ExpatXS-1.33/t/f05xmlns-uris2.t000644 000765 000024 00000002363 11254652013 020355 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; _xml_ $parser->parse_string($xml); $parser->set_feature('http://xml.org/sax/features/xmlns-uris', 1); $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq 'foo({}id/{}xmlns)p:boo({http://www.w3.org/2000/xmlns/}p/{}id)foo({}id/{}xmlns)p:boo({http://www.w3.org/2000/xmlns/}p/{}id)'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_element { my ($self, $el) = @_; #warn("Start:$el->{Name}:$el->{Attributes}\n"); #Dump($el); $atts = join('/', sort keys %{$el->{Attributes}}); $self->{data} .= "$el->{Name}($atts)"; } sub end_element { my ($self, $el) = @_; #warn("End:$el->{Name}\n"); #Dump($el); } sub start_prefix_mapping { my ($self, $map) = @_; #warn("sPref:$map->{Prefix}\n"); #Dump($map); #$self->{data} .= "sP($map->{Prefix}:$map->{NamespaceURI})"; } sub end_prefix_mapping { my ($self, $map) = @_; #warn("ePref:$map->{Prefix}\n"); #Dump($map); #$self->{data} .= "eP($map->{Prefix})"; } XML-SAX-ExpatXS-1.33/t/f06ext-general.t000644 000765 000024 00000003676 11254652013 020376 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 2 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; ]> &external; _xml_ $parser->parse_string($xml); $parser->set_feature('http://xml.org/sax/features/external-general-entities', 0); ok($handler->{data}, '_sD_sDtd_eDec(external,extPubID,t/external.xml)_eDtd_sE(root)_sEnt(external)_sE(boo)_eE_eEnt(external)_eE_eD'); $handler->{data} = ''; $parser->parse_string($xml); ok($handler->{data}, '_sD_sDtd_eDec(external,extPubID,t/external.xml)_eDtd_sE(root)_eE_eD'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); #Dump($el); $self->{data} .= '_sD'; } sub end_document { my ($self, $doc) = @_; #warn("EndDoc:\n"); #Dump($el); $self->{data} .= '_eD'; } sub start_element { my ($self, $el) = @_; #warn("StartEl:\n"); #Dump($el); $self->{data} .= "_sE($el->{Name})"; } sub end_element { my ($self, $el) = @_; #warn("EndEl:\n"); #Dump($el); $self->{data} .= '_eE'; } sub start_dtd { my ($self, $dtd) = @_; #warn("StartDTD:\n"); #Dump($el); $self->{data} .= '_sDtd'; } sub end_dtd { my ($self, $dtd) = @_; #warn("EndDTD:\n"); #Dump($dtd); $self->{data} .= '_eDtd'; } sub external_entity_decl { my ($self, $ent) = @_; #warn("ExtEntDecl:$ent->{Name}\n"); #Dump($ent); $self->{data} .= "_eDec($ent->{Name},$ent->{PublicId},$ent->{SystemId})"; } sub start_entity { my ($self, $ent) = @_; #warn("StartEnt:$ent->{Name}\n"); #Dump($ent); $self->{data} .= "_sEnt($ent->{Name})"; } sub end_entity { my ($self, $ent) = @_; #warn("EndEnt:$ent->{Name}\n"); #Dump($ent); $self->{data} .= "_eEnt($ent->{Name})"; } XML-SAX-ExpatXS-1.33/t/f07ext-param.t000644 000765 000024 00000003310 11254652013 020043 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 2 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; _xml_ $parser->parse_string($xml); ok($handler->{data}, '_sd_sdtd|html|pub|virtual.dtd_edtd_se_ee'); $parser->set_feature('http://xml.org/sax/features/external-parameter-entities', 1); $handler->{data} = ''; $parser->parse_string($xml); ok($handler->{data}, '_sd_sdtd|html|pub|virtual.dtd_sent|[dtd]_eent_edtd_se_char|value_ee'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); $self->{data} .= '_sd'; } sub start_element { my ($self, $el) = @_; #warn("StartEl:\n"); $self->{data} .= '_se'; } sub end_element { my ($self, $el) = @_; #warn("EndEl:\n"); $self->{data} .= '_ee'; } sub start_dtd { my ($self, $dtd) = @_; #warn("startDTD:\n"); $self->{data} .= '_sdtd|' . $dtd->{Name}; $self->{data} .= '|' . $dtd->{PublicId}; $self->{data} .= '|' . $dtd->{SystemId}; } sub end_dtd { my ($self, $dtd) = @_; #warn("endDTD:\n"); $self->{data} .= '_edtd'; } sub start_entity { my ($self, $ent) = @_; #warn("startEnt:$ent->{Name}\n"); $self->{data} .= '_sent|' . $ent->{Name}; } sub end_entity { my ($self, $ent) = @_; #warn("endEnt:\n"); $self->{data} .= '_eent'; } sub resolve_entity { my ($self, $ent) = @_; #warn("resolveEnt:\n"); return {String => ''}; } sub characters { my ($self, $char) = @_; #warn("Char:$char->{Data}\n"); $self->{data} .= '_char|' . $char->{Data}; } XML-SAX-ExpatXS-1.33/t/f08expatversion.t000644 000765 000024 00000000723 11254652013 020702 0ustar00pcimprichstaff000000 000000 # Provided by Axel Eckenberger, Nov 3, 2005 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler); ###################### Test 1 ###################### # Looking for Expat version my $ev = $parser->{ExpatVersion}; #print "ExpatVersion: $ev\n"; ok( $ev =~ /^expat_[\d\.]+$/); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } XML-SAX-ExpatXS-1.33/t/f09noexpand.t000644 000765 000024 00000003072 11536166302 017774 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler, NoExpand => 1 ); my $xml =<<_xml_; ]> &internal; _xml_ $parser->parse_string($xml); #warn $handler->{data}; ok($handler->{data} eq '_sD_sDtd_iDec(internal,int_entity_value)_eDtd_sE(root)_ch(N)_ch(N)_eE_eD'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub start_document { my ($self, $doc) = @_; #warn("StartDoc:\n"); #Dump($el); $self->{data} .= '_sD'; } sub end_document { my ($self, $doc) = @_; #warn("EndDoc:\n"); #Dump($el); $self->{data} .= '_eD'; } sub start_element { my ($self, $el) = @_; #warn("StartEl:\n"); #Dump($el); $self->{data} .= "_sE($el->{Name})"; } sub end_element { my ($self, $el) = @_; #warn("EndEl:\n"); #Dump($el); $self->{data} .= '_eE'; } sub start_dtd { my ($self, $dtd) = @_; #warn("StartDTD:\n"); #Dump($el); $self->{data} .= '_sDtd'; } sub end_dtd { my ($self, $dtd) = @_; #warn("EndDTD:\n"); #Dump($dtd); $self->{data} .= '_eDtd'; } sub internal_entity_decl { my ($self, $ent) = @_; #warn("IntEntDecl:$ent->{Name}\n"); #Dump($ent); $self->{data} .= "_iDec($ent->{Name},$ent->{Value})"; } sub characters { my ($self, $ch) = @_; $ch->{Data} =~ s/\n/N/g; #warn("Char:$ch->{Data}\n"); #Dump($ch); $self->{data} .= "_ch($ch->{Data})"; } XML-SAX-ExpatXS-1.33/t/file.xml000644 000765 000024 00000013565 11254652013 017121 0ustar00pcimprichstaff000000 000000 XMLhack http://xmlhack.com/ Developer news from the XML community en-us Edd Dumbill (mailto:webmaster@xmlhack.com) Edd Dumbill (mailto:editor@xmlhack.com) Copyright 1999-2001, xmlhack team. xmlhack http://xmlhack.com/images/mynetscape88.gif http://xmlhack.com News, opinions, tips and issues concerning XML development RNV: C-based Relax NG validator http://xmlhack.com/read.php?item=2168 RNV is a command-line tool for validating XML documents against schemas written in Relax NG compact syntax. Developed by David Tolpin and written in portable ANSI C, it's fast, lightweight, and provides very good reporting about validity errors in documents. Tools Schemas libxml 2.6.7 and libxslt 1.1.3 released http://xmlhack.com/read.php?item=2167 Daniel Veillard has recently released updated versions of libxml and libxslt. An important security fix is included, along with some improvements and optimizations and bug fixes. Tools XML and Databases article translated http://xmlhack.com/read.php?item=2164 The article "XML and Databases", by Ronald Bourret, has recently been translated into French and Chinese. Databases Why XML 1.1? http://xmlhack.com/read.php?item=2160 The W3C has published XML 1.1 and namespaces in XML 1.1, two recommendations which don't change that many things but may have an important impact for XML applications, unless they are ignored by a vast majority. W3C XML xmlformat: Consistently format XML files http://xmlhack.com/read.php?item=2154 xmlformat is a REX-based script (take your pick from Perl or Ruby versions) for consistently reformatting XML files; that is, "canonizing" and normalizing whitespace, indenting, line-wrapping, and placement of line breaks. It works as advertised, handling mixed content and "verbatim" content correctly. Tools XML data formats take center stage in the Financial Services industry http://xmlhack.com/read.php?item=2148 A conference focusing on XML in the Financial Services industry casts doubt on the conventional wisdom about Web services and the role of tightly-coupled middleware in real-world XML developments. Community Extreme Markup Languages 2004 http://xmlhack.com/read.php?item=2131 Originally announced at XML 2003, the Call for Participation for Extreme Markup 2004 is now open. The conference will be held from 3-6 August in Montral, Canada. Community Reminder of XML Europe 2004 Call for Participation http://xmlhack.com/read.php?item=2129 The deadline for submissions to XML Europe 2004 is imminent -- January 5, 2004. The conference will take place from April 18-21 2004 in Amsterdam. Community XML-SAX-ExpatXS-1.33/t/file2.xml000644 000765 000024 00000004513 11254652013 017174 0ustar00pcimprichstaff000000 000000 ROOT.cz http://www.root.cz/ Informace (nejenom) se svta Linuxu cs Lazarus a FPC, aneb editor pro TeX za hodinu prce http://www.root.cz/clanek/2132 Jak jste si jist vimli, programy pro Linux jsou psny ve veliem. Pojme se pobavit o jednom zstupci klasickch programovacch jazyk v Open Source variant. Mutt - zanme bezbolestn (2) http://www.root.cz/clanek/2131 V tomto pokraovn vodu do muttu si probere rzn nastaven, konkrtn barviek, prce se slokami, alias, spoutn externch program a signatury. Stalo se v tdnu od 27. 3. do 2. 4. http://www.root.cz/clanek/2130 Pro ty, kte tou ROOTa jen o vkendu, pinme souhrn krtkch zprv, kter jsme v uplynulm tdnu publikovali: Google inovuje - Praha vyhrla u OpenOffice.org - MandrakeSoft ji nen pod nucenou sprvou - naloen africk vlatovky pekonaly holuby(TM). Linuxov hry (32): Unreal Tournament http://www.root.cz/clanek/2129 Unreal Tournament je stleka z vlastnho pohledu, kter je ideln na to, aby vs co nejvce vthl do asti ve he, abyste s postavou "srostli". Ve sv dob si hra zskala znanou popularitu vedle svho mon znmjho konkurenta Quake III Arena. V souasnosti ji vyly dal dva dly, ale UT si stle zachovv velkou oblbenost, je to u klasika. Akta X 0403 http://www.root.cz/clanek/2128 Nvrh verze 2.0 jazyka RDDL vyvolal smen ohlasy; hlavnm dvodem je odklon od formtu XLink. Pipravuje se nov verze rozhran SAX. Sadu nstroj pro prci s XML po del dob rozily nov zajmav ckov knihovny. XML-SAX-ExpatXS-1.33/t/x01zero-bug.t000644 000765 000024 00000000745 11254652013 017724 0ustar00pcimprichstaff000000 000000 use Test; BEGIN { plan tests => 1 } use XML::SAX::ExpatXS; my $handler = TestH->new(); my $parser = XML::SAX::ExpatXS->new( Handler => $handler ); my $xml =<<_xml_; 0 _xml_ $parser->parse_string($xml); #warn "[$handler->{data}]"; ok($handler->{data} eq '0'); package TestH; #use Devel::Peek; sub new { bless {data => ''}, shift } sub characters { my ($self, $char) = @_; #warn("Char:$char->{Data}\n"); #Dump($char); $self->{data} .= $char->{Data}; } XML-SAX-ExpatXS-1.33/lib/XML/000755 000765 000024 00000000000 12042437703 016414 5ustar00pcimprichstaff000000 000000 XML-SAX-ExpatXS-1.33/lib/XML/SAX/000755 000765 000024 00000000000 12042437703 017047 5ustar00pcimprichstaff000000 000000 XML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS/000755 000765 000024 00000000000 12042437703 020403 5ustar00pcimprichstaff000000 000000 XML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS.pm000644 000765 000024 00000021756 12042433220 020742 0ustar00pcimprichstaff000000 000000 package XML::SAX::ExpatXS; use strict; use vars qw($VERSION @ISA); use XML::SAX::ExpatXS::Encoding; use XML::SAX::ExpatXS::Preload; use XML::SAX::Base; use DynaLoader (); use Carp; use IO::File; $VERSION = '1.33'; @ISA = qw(DynaLoader XML::SAX::Base XML::SAX::ExpatXS::Preload); XML::SAX::ExpatXS->bootstrap($VERSION); my @features = ( ['http://xml.org/sax/features/namespaces', 1], ['http://xml.org/sax/features/external-general-entities', 1], ['http://xml.org/sax/features/external-parameter-entities', 0], ['http://xml.org/sax/features/xmlns-uris', 0], ['http://xmlns.perl.org/sax/xmlns-uris', 1], ['http://xmlns.perl.org/sax/version-2.1', 1], ['http://xmlns.perl.org/sax/join-character-data', 1], ['http://xmlns.perl.org/sax/ns-attributes', 1], ['http://xmlns.perl.org/sax/locator', 1], ['http://xmlns.perl.org/sax/recstring', 0] ); my @supported_features = map($_->[0], @features); #------------------------------------------------------------ # API methods #------------------------------------------------------------ sub new { my $proto = shift; my $options = ($#_ == 0) ? shift : { @_ }; foreach (@features) { $options->{Features}->{$_->[0]} = $_->[1]; } $options->{ExpatVersion} = ExpatVersion(); return $proto->SUPER::new($options); } sub get_feature { my ($self, $feat) = @_; if (exists $self->{Features}->{$feat}) { return $self->{Features}->{$feat}; } else { return $self->SUPER::get_feature($feat); } } sub set_feature { my ($self, $feat, $val) = @_; if (exists $self->{Features}->{$feat}) { return $self->{Features}->{$feat} = $val; } else { return $self->SUPER::set_feature($feat, $val); } } sub get_features { my $self = shift; return %{$self->{Features}}; } sub supported_features { my $self = shift; return @supported_features; } #------------------------------------------------------------ # internal methods #------------------------------------------------------------ sub _parse_characterstream { my ($self, $fh) = @_; $self->{ParseOptions}->{ParseFunc} = \&ParseStream; $self->{ParseOptions}->{ParseFuncParam} = $fh; $self->_parse; } sub _parse_bytestream { my ($self, $fh) = @_; $self->{ParseOptions}->{ParseFunc} = \&ParseStream; $self->{ParseOptions}->{ParseFuncParam} = $fh; $self->_parse; } sub _parse_string { my ($self, $str) = @_; $self->{ParseOptions}->{ParseFunc} = \&ParseString; $self->{ParseOptions}->{ParseFuncParam} = $str; $self->_parse; } sub _parse_systemid { my ($self, $uri) = @_; my $fh = IO::File->new($uri) or croak "ExpatXS: Can't open $uri ($!)"; $self->{ParseOptions}->{ParseFunc} = \&ParseStream; $self->{ParseOptions}->{ParseFuncParam} = $fh; $self->_parse; } sub _parse { my $self = shift; my $args = bless $self->{ParseOptions}, ref($self); delete $args->{ParseOptions}; # copy handlers over $args->{Handler} = $self->{Handler}; $args->{DocumentHandler} = $self->{DocumentHandler}; $args->{ContentHandler} = $self->{ContentHandler}; $args->{DTDHandler} = $self->{DTDHandler}; $args->{LexicalHandler} = $self->{LexicalHandler}; $args->{DeclHandler} = $self->{DeclHandler}; $args->{ErrorHandler} = $self->{ErrorHandler}; $args->{EntityResolver} = $self->{EntityResolver}; $args->{_State_} = 0; $args->{Context} = []; $args->{ErrorMessage} ||= ''; $args->{Namespace_Stack} = [[ xml => 'http://www.w3.org/XML/1998/namespace' ]]; $args->{Parser} = ParserCreate($args, $args->{Source}{Encoding} || $args->{ProtocolEncoding}, 1); $args->{Locator} = GetLocator($args->{Parser}, $args->{Source}{PublicId} || '', $args->{Source}{SystemId} || '', $args->{Source}{Encoding} || '', ); $args->{RecognizedString} = GetRecognizedString($args->{Parser}); $args->{ExternEnt} = GetExternEnt($args->{Parser}); $args->{Methods} = {}; $args->get_start_element(); $args->get_end_element(); $args->get_characters(); $args->get_comment(); # the most common handlers are available as refs SetCallbacks($args->{Parser}, $args->{Methods}->{start_element}, $args->{Methods}->{end_element}, $args->{Methods}->{characters}, $args->{Methods}->{comment}, ); $args->set_document_locator($args->{Locator}); $args->start_document({}); my $result; $result = $args->{ParseFunc}->($args->{Parser}, $args->{ParseFuncParam}); ParserFree($args->{Parser}); my $rv = $args->end_document({}); # end_document is still called on error croak($args->{ErrorMessage}) unless $result; return $rv; } sub _get_external_entity { my ($self, $base, $sysid, $pubid) = @_; # resolving with the base URI if ($base and $sysid and $sysid !~ /^[a-zA-Z]+[a-zA-Z\d\+\-\.]*:/) { $base =~ s/[^\/]+$//; $sysid = $base . $sysid; } # user defined resolution my $src = $self->resolve_entity({PublicId => $pubid, SystemId => $sysid}); my $fh; my $result; my $string; if (ref($src) eq 'CODE') { $fh = IO::File->new($sysid) or croak("Can't open external entity: $sysid\n"); } elsif (ref($src) eq 'HASH') { if (defined $src->{CharacterStream}) { $fh = $src->{CharacterStream}; } elsif (defined $src->{ByteStream}) { $fh = $src->{ByteStream}; } elsif (defined $src->{String}) { $result = $src->{String}; $string = 1; } else { $fh = IO::File->new($src->{SystemId}) or croak("Can't open external entity: $src->{SystemId}\n"); } } else { croak ("Invalid object returned by EntityResolver: $src\n"); } unless ($string) { local $/; undef $/; $result = <$fh>; close($fh); } return $result; } sub _get_handler_methods { my $self = shift; } 1; __END__ =head1 NAME XML::SAX::ExpatXS - Perl SAX 2 XS extension to Expat parser =head1 SYNOPSIS use XML::SAX::ExpatXS; $handler = MyHandler->new(); $parser = XML::SAX::ExpatXS->new( Handler => $handler ); $parser->parse_uri($uri); #or $parser->parse_string($xml); =head1 DESCRIPTION XML::SAX::ExpatXS is a direct XS extension to Expat XML parser. It implements Perl SAX 2.1 interface. See http://perl-xml.sourceforge.net/perl-sax/ for Perl SAX API description. Any deviations from the Perl SAX 2.1 specification are considered as bugs. =head2 Features The parser behavior can be changed by setting features. $parser->set_feature(FEATURE, VALUE); XML::SAX::ExpatXS provides these adjustable features: =over =item C Consequent character data are joined (1, default) or not (0). =item C Namespace attributes are reported as common attributes (1, default) or not (0). =item C When set on, xmlns and xmlns:* attributes are put into namespaces in a Perl SAX traditional way; xmlns attributes are in no namespace while xmlns:* attributes are in the C namespace. This feature is set to 1 by default. =item C This feature applies if and only if the C feature is off. Then, xmlns and xmlns:* attributes are both put into no namespace (0, default) or into C namespace (1). =item C The document locator is updated (1, default) for ContentHadler events or not (0). =item C A recognized string (the text string currently processed by this XML parser) is either maintained as $parser->{ParseOptions}{RecognizedString} (1) or not (0, default). =item C Controls whether this parser processes external general entities (1, default) or not (0). =item C Controls whether this parser processes external parameter entities including an external DTD subset (1) or not (0, default). =back =head2 Constructor Options Apart from features, the behavior of this parser can also be changed with options to the constructor. =over =item ParseParamEnt ParseParamEnt => 1 This option meaning is exactly the same as the C feature. The option is supported only because of the compatibility with older versions of this module. Turned off by default. =item NoExpand NoExpand => 1 No internal entities are expanded if this option is turned on. Turned off by default. =back =head2 Read-only Properties =over =item ExpatVersion This property returns a version of linked Expat library, for example expat_1.95.7. =back =head1 AUTHORS Petr Cimprich (maintainer) Matt Sergeant =head1 COPYRIGHT 2002-2004 Matt Sergeant, 2004-2011 Petr Cimprich. All rights reserved. =head1 LICENSE This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut XML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS/Encoding.pm000644 000765 000024 00000006602 11254652014 022471 0ustar00pcimprichstaff000000 000000 # $Id: Encoding.pm,v 1.2 2004/05/15 15:56:26 cvspetr Exp $ package XML::SAX::ExpatXS::Encoding; require 5.004; use strict; use vars qw(@ISA %Encoding_Table @Encoding_Path $have_File_Spec); use XML::SAX::ExpatXS; use Carp; require DynaLoader; @ISA = qw(DynaLoader); $have_File_Spec = $INC{'File/Spec.pm'} || do 'File/Spec.pm'; %Encoding_Table = (); if ($have_File_Spec) { @Encoding_Path = (grep(-d $_, map(File::Spec->catdir($_, qw(XML SAX ExpatXS Encodings)), @INC)), File::Spec->curdir); } else { @Encoding_Path = (grep(-d $_, map($_ . '/XML/SAX/ExpatXS/Encodings', @INC)), '.'); } sub load_encoding { my ($file) = @_; $file =~ s!([^/]+)$!\L$1\E!; $file .= '.enc' unless $file =~ /\.enc$/; unless ($file =~ m!^/!) { foreach (@Encoding_Path) { my $tmp = ($have_File_Spec ? File::Spec->catfile($_, $file) : "$_/$file"); if (-e $tmp) { $file = $tmp; last; } } } local(*ENC); open(ENC, $file) or croak("Couldn't open encmap $file:\n$!\n"); binmode(ENC); my $data; my $br = sysread(ENC, $data, -s $file); croak("Trouble reading $file:\n$!\n") unless defined($br); close(ENC); my $name = XML::SAX::ExpatXS::LoadEncoding($data, $br); croak("$file isn't an encmap file") unless defined($name); $name; } # End load_encoding ################################################################ package XML::SAX::ExpatXS::Encinfo; sub DESTROY { my $self = shift; XML::SAX::ExpatXS::FreeEncoding($self); } ################################################################ package XML::SAX::ExpatXS::ContentModel; use overload '""' => \&asString, 'eq' => \&thiseq; sub EMPTY () {1} sub ANY () {2} sub MIXED () {3} sub NAME () {4} sub CHOICE () {5} sub SEQ () {6} sub isempty { return $_[0]->{Type} == EMPTY; } sub isany { return $_[0]->{Type} == ANY; } sub ismixed { return $_[0]->{Type} == MIXED; } sub isname { return $_[0]->{Type} == NAME; } sub name { return $_[0]->{Tag}; } sub ischoice { return $_[0]->{Type} == CHOICE; } sub isseq { return $_[0]->{Type} == SEQ; } sub quant { return $_[0]->{Quant}; } sub children { my $children = $_[0]->{Children}; if (defined $children) { return @$children; } return undef; } sub asString { my ($self) = @_; my $ret; if ($self->{Type} == NAME) { $ret = $self->{Tag}; } elsif ($self->{Type} == EMPTY) { return "EMPTY"; } elsif ($self->{Type} == ANY) { return "ANY"; } elsif ($self->{Type} == MIXED) { $ret = '(#PCDATA'; foreach (@{$self->{Children}}) { $ret .= '|' . $_; } $ret .= ')'; } else { my $sep = $self->{Type} == CHOICE ? '|' : ','; $ret = '(' . join($sep, map { $_->asString } @{$self->{Children}}) . ')'; } $ret .= $self->{Quant} if $self->{Quant}; return $ret; } sub thiseq { my $self = shift; return $self->asString eq $_[0]; } 1; __END__ =head1 NAME XML::SAX::ExpatXS::Encoding - Encoding support for XML::SAX::ExpatXS =head1 DESCRIPTION This module is derived from XML::Parser::Expat. It provides XML::SAX::ExpatXS parser with support of not-built-in encodings. =head1 AUTHORS Larry Wall > and Clark Cooper > authored XML::Parser::Expat. Petr Cimprich > addapted it for XML::SAX::ExpatXS. =cut XML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS/Encodings/000755 000765 000024 00000000000 12042437703 022314 5ustar00pcimprichstaff000000 000000 XML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS/Encodings/big5.enc000644 000765 000024 00000117402 11254652014 023634 0ustar00pcimprichstaff000000 000000 BIG5YA  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Y@Y@@@W@@@@S@@@@O@ @ @ @ K@ @ @ @G@@@@C@@@@?@@@|@;@@@x@7@@@t@1@@@n@ -@ @!@"j@#)@#@$@%f@&%@&@'@(b@)!@)@*@+^@,@,@-@.Z@/@/@0@1V@2@2@3@4R@5@5@6@7N@8 @8@9@:J@; @;@<@=F@>@>@?@@B@A?  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX0 00 "0 & %PdRTUVW\ 1 34O 56[]78009:00;<0 0 =>00 ?@0 0 AB00CDYZ[\]^    00 5 2 ;0%%%%%&&%%%%%%2! >?IJMNKL_`a ""f"g"`""R"abcdef"<")"*"" ""33"+"."5"4&@&B&A& !!!!!!!!"%"#<0 !! ijk333333333QYQ[Q^Q]QaQcUt|%%%%%%%%%%%%%%%%<%4%,%$%%%%%% %%%%m%n%p%o%P%^%j%a%%%%%q%r%s!`!a!b!c!d!e!f!g!h!i0!0"0#0$0%0&0'0(0)SD!"#$%&'()*+,-./0123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ11111 1 1 1 1 1111111111111111111 1!1"1#1$1%1&1'1(1)NNYNNNCN]NNNQ?QeQkQRRRSSAS\SN N NN N+N8QNENHN_N^NNQ@RRSCSSWXYY'Ys[P[Q[S[\\"\8\q]]]]]]^r^_ _bMNNN N-N0N9NK\9NNNNNNNNNNNNNNNQCQAQgQmQnQlQQRRRRRRSS9SHSGSES^SSSSXY)Y+Y*Y-[T\\$\:\o]^{^___bb6bKbNe/eeeeefgg(k kbkykkkll4pkr*r6r;rGrYr[rsNNNNNN;NMNONNNNNNNNNNNNQEQDQQQQQQR RRSSSSNSJSISaS`SoSnSSSSSSSSSSSSSSSSSSSSVVYY.Y1YtYv[U[\<]]]^^^s^|____b bSbTbRbQeeg.g,g*g+g-kcklll8lAl@l>rssttuuu(u)u0u1u2u3uv}vvvwwwy:yztzNNNRNSNiNNNNNO OO OO OOONNNNNNOO QIQGQFQHQhQqQQRRRRRRSS!S SpSqT TT T TTT TTT TTTTTVVVW3W0W(W-W,W/W)YYY7Y8YYxYY}YyYY[W[X[[[[[\\y]^^v^t____bb b bbcb[bXe6eeeeffg g=g4g1g5k!kdk{ll]lWlYl_l`lPlUlal[lMlNppr_r]v~z|s|6 3 nr~k@Lc!N2NOMOOOGOWO^O4O[OUO0OPOQO=O:O8OCOTOT&TNT'TFTCT3THTBTT)TJT9T;T8T.T5T6T TWPWOW;XY>YYYYYYYYYYYY[][\[Z[[[[[\,\@\A\?\>\\\\]^ ^^^^___d_b_w_y________bbbbbbbvbbmbb|b~bybsbbobbnbbbbe9e;e8efg_gNgOgPgQg\gVg^gIgFg`gSgWkeklBl^llllllljlzllpllhlll}llrl~ltllvllllpvp|p}pxrbrar`rrsu,u+u7u8vvwyyyzv|UoҊ7FUdpʏƏŏ]ᐑIƑ̖2.1*,N&NVNsNNNNNOoOOOsOOlOOOOOpOuOOiO{OO~OOOzQTQRQUQiQwQvQxQQR;R8R7R:R0R.R6RARRSRSTSSSQSfSwSxSySSSTsTuTTxTTT{TwTTTT|TTqTvTTTbThTT}TVWWwWjWiWaWfWdW|YYIYGYHYDYTYYYYYYYYYYYYYYYY[_[d[c[[[[[[\\H\E\F\\\\\\\^^^^^^^x^^^^^^_&_'_)____|_____```/`5``*``!`'`)`+`bbb?b>b@bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbe>eeefff fffffff fg g gmgggqggsgwggggogpggg~gguggg|gjgrk#kfkgkllllllllllllllllllllllllllllllllllpppppr,r-r8rHrgrirrrrrsssssu=uuuvvvvwwy>y@yAyyzzzyz|T NqRhˏΏԏѐǑѕw@?;DBR^NNNOOOOOOOOOOOOOOOOOOOOOOQWQQQRNRCRJRMRLRKRGRRRRS SWS{SSTTTTTTTTTTTTTTTTTTTTTTVWWWWWWWWYUYQYOYNYPYYYYYZYYYYZY[i[[[[[\\N\O\M\K\\]^^%^^}^^^__-_e_______``` `%``(`M`p`h`b`F`C`l`k`j`dbAbcc bbcbbcbbbbbbcce?eEeeef%f-f f'f/ff(f1f$fgggggggggggggggggggggggggkjkkkkkllm m2m*mAm%m m1mmm;m=m>m6mlm9m'm8m)m.m5mm+pppppppppr0rrrortrrrsssssssuu-uOuLuNuKuuuuuvxvvvvvvvwvvw w vvwwxxx x yFyIyHyGyyyyyzzzz|}}}}} }}}8 6րڀÀĀ̀ۀ΀ހ݁"ۂ ҂ׂ܂Ԃтނӂ߂Py{zMkԊts͎̏ʐΐÑKJ͕PKLMbi˗ۘߙNXNP P P#OP&P%OP)PPPc/cUcBcFcOcIc:cPc=c*c+c(cMcLeHeIeeefBfIfOfCfRfLfEfAfgggh!h8hHhFhSh9hBhTh)hhhLhQh=ghPh@hSfUFUjUfUDU^UaUCUJU1UVUOUUU/UdU8U.U\U,UcU3UAUWWW W WXX XWWWXX5WWY YbZ6ZAZIZfZjZ@ZwUUUUUU~UUUW X/X*X4X$X0X1X!XX XXY`ZwZZZZZ[s[q[[[[\ \ \1]L]P]4]G]^E^=^@^C^~^^^^_<_m___`````aa#`a```ah`a`a aabbIccccccccccccccccvcccdRcce^efebeceeefnfpftfvfoffzf~fwffgghhhhhihhhhhhhhhhi iihhinhk>k:k=kkkkl.l/l,n/n8nTn!n2ngnJn n%n#nn[nXn$nVnnn-n&non4nMn:n,nCnn>nnnnNncnDnrnin_qqq&q0q!q6qnqrLrrs6s%s4s)t:t*t3t"t%t5t6t4t/tt&t(u%u&ukujuuuuuuuv{v|vvvvwOwx]xlxoz zz zzzzzzz{I{V{F{P{R{T{M{K{O{Q||}^}P}h}U}+}n}r}a}f}b}p}sUՀ RUTKQN9F>LSt ń W ̃ʄ8܄ԃ߆[߆نԆۆІވWˆ;`U^a4a'a aa7b!b"dd>dd*d-d=d,dddd d6dddeleeffffffffgiimiZiwi`iTiui0iiJihiki^iSiyii]ici[kGkrkkkknnnnnnnnnnnnnnnnnnnnnnqNqYqiqdqIqgq\qlqfqLqeq^qFqhqVr:rRs7sEs?s>totZtUt_t^tAt?tYt[t\uvuxvuvuuuuuuvvw[wkwfw^wcwywjwlw\wewhwbwxxxxxxx|xxxyzyy,yzzz zzzzz{w{{`{n{g|||}}y}}}}[nijrVXqpxenskyzfGw=1ufkIl[<5acimF^\_ Y߈Ԉو܈؈݈ʈՈ҉krsfip|cqmbnly{>hbʌnjȌČ̌ōߍ掲 KJSBTAljiɒ7W8=@>[KdQ4IME9?Z͖˖ɖʖVtv  鞂 PPPPPPPPPPPPQbQRRS1SUVVVUVVV V VUVVVVUWWXuX~XXXXyXX}XY%Y"Y$YjYiZZZZZZZ[u[[[[[[[[[\ \b]]^[^c^U^W^T^^_ _F_p_aGa?aKawabaca_aZaXaub*ddXdTddxd_dzdQdgd4dmd{ereeefffiiiiiiiiiiiiiiiiiiikIkLl3o3onono)o>o o,ooo"nnoo1o8o2o#oo+o/oo*nonnnqqq}qqqr>rrsDsPtdtctjtptmuuv'v v v vvvww}wwaxxxxxxyyyz.z1zzzz{{{{u{{{{{{{|||}}}}}}}}}}}}}}}}}}}p߀^ZPKɄƄĄ˄ӄфʇ?;"%4U7)jӌьҍk`X\cY^b][uxwtx{|̖җ| AB󞼟;JQQPPPQQQ QQRRRRRRSV.V;V9V2V?V4V)VSVNVWVtV6V/V0XXXXXXXXYm[ Z[ Z[ [[[[[\d\e]]^b^_^a^^^^^^_H_q__avagana]aUaa|apaka~aaaaaaaaab.didodyddddddddddddddddddeuewexffffj#jijjjij!jj ijjijkPkNkkko?o|ooQofoToomo[oxonoozopodooXnooo`o_qqqqrVrsNsWtittt~tuv v)vv$v&v!v"vvvwwwwwxxxxxxxxz?z~F~7~2~C~+~=~1~E~A~4~9~H~5~?~/DqrposƁÁɁ q~gч҇Ƈȇˉ;6D8= A?sIKHJD>BE?}9M(uJeK~l[pZTʕ˕̕ȕƖ֗ӘF5;?Ϟޞܞݞ۟>KSVVXX[8_]ab3dddedddefg&jjjjjjjjk_kxkp p opoppqqqqswsuttuvVvXvRwwwwyyzazbz`zz|+|'|*||#|!|~T~U~^~Z~a~R~YHwv́ς υͅЅɅ(9,+PYcfd_UIMГԕ֕ЕՖܖٖۖޗ$MOLNS>?=.ONMʛɛțQ]`,Q3VXXX[^aaaaeeffjjjjppp(pppprr rXrsxsztttuuv_vawyyzkzi|>|?|8|=|7|@~k~m~y~i~j~s؅݅Յ `_V^A\XIZNOFY |rvlztTNѓߓÓȓܓݓ͓֓ؓדܖ*'aܗ^X[EI ֛۝arjlRVVVVVX[@[C[}[]aaeeefg'jp>p0p2rs{tvbvey&y*y,y+zz|L|C|M||~}~|~Lڂf  dplfo_k ˔0ęRQ+075 y/_caQ7Q8VVVY\l]aaeeefjkjkpLrrttviw|P~~-#"!jltw}_.35:82+892geWEC@>ϛTQ-%\fgQ×kUUMқI1>;ӝן4ljV]be#e+e*fktz|d|c|e~~~8?1c`dho\Z[WӚԚќTWV垟VXe,p^vqvrwP69bwjBHDƘp_"X_|}wr^kpc|l|n;rpq^֛#pdwڋwɚbe~Ŕ}~|wxTr(j1|r00000A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0[0\0]0^0_0`0a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0{0|0}0~00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000#$%&'()*+,-./012345Q6789:;<=>?@ABCDEFGHIJKLMNO$`$a$b$c$d$e$f$g$h$i$t$u$v$w$x$y$z${$|$}NBN\QSSNN NGNV \n_sNQNN.NNNNQRSlSW YY,\]ekklr?N1Ng9g8g;g:g?gOgORO_OAOXO-O3O?OaQQRRR!RRS ScSrSST0T7T*TTTETTT%TT=TOTAT(T$TGVVVWAWEWLWIWKWRYY@YYYYYYYYYY[[\(\*\\\\\\\\\\]^ ^^^^^^___x_v______________`_b:bbbbbbbqb{bzbpbbbwb}brbte7eeeeegEgGgYgUgLgHg]gMgZgKklllxlglkllllqlolillmllllflslel{lptpzrcrrrrrrrsssssu:u9uuvy=4xɏ0(/-N3OO|OO}OOOvOtOOOwOLOOjOOyOOxOOOOOOOOkOnQQQR5R2R3RFR1RS S SuuvvvvvwwwwwwyBy?yzxz{z|u|5 ‚ÂpomnVҏˏӏ͏֏Տא9=<:COOOOOOOOOOOOOOOOOOORDRIRRS=S|SSSSTTTTTTà TTTTTTTTpTTTTrTTWWWWWWWWWWWWWWWXY YSYYYZYYYYYYYYYYYYYYYYY[\L\\\\\\\\\\\\\\\\\\\\]^!^"^#^ ^$^^^^^^__._V_`7`9`T`r`^`E`S`G`I`[`L`@`B`_`$`D`X`f`nbBbCbc c bccbbcc bbcccbcbbeAeCeef6f!f2f5ff&f"f3f+f:ff4f9f.ggggggggggggggggggggggggggggggggggggggggggk(kkkkkkl l!m(m4m-mm9/%3-DQ%V?A&"BN*ZMZ9ZLZpZiZGZQZVZBZ\[r[n[[\Y]] ]]] ] ](] ]&]%]]0]]#]].^>^4^^^^^_6_8___`````````````````````c2ceccc}ccccccccocccnccuccmcc|cc;ccxcccccpeSefefaf[fYf\fbghyhhhhmhnhhiVhohhhhuhthhhwhh|hkhrhhhqh~hhhhhhhxh{hhhh}k6k3k7k8kkkkkl*mmmmntmmmmmmnmmmmmmmmmmmmmmmmmmmmmmmmmmmpq pqpq pqpqppqqqppq qqr~r{r|rssssss srssssssttsttssst t studucuuuuuuuvvvw9w/w-w1w2w4w3w=w%w;w5xHxRxIxMxJxLx&xExPydygyiyjycykyayyyyyzzz{5{G{4{%{0{"{${3{{*{{1{+{-{/{2{8{{#||||}5}=}8}6}:}E},})}A}G}>}?}J};}(cɀGCH%-,!'"83:42tzstu}~vYV†ņȆ̆ÆR։ىՊ0',9;\]}}{y؎ގݎ܎׎$  !ԐVXZSUz|mkqoj噗PPPPPPPPPPPhPPPPQ_QSSSSUUUUUwVEUUUUUUUUUU}UUUUUUW X)X7XXX'X#X(WXHX%XXX3X?X6X.X9X8X-X,X;YaZZZZzZZZxZZ|ZZZZZ7ZZZZZZZ{Z}ZZZZZ[[[[[[[\ \0]7]C]k]A]K]?]5]Q]N]U]3]:]R]=]1]Y]B]9]I]8]<]2]6]@]E^D^A_X___``````a`a aa`a````aaaa`aa bJccccccccdcccccccdaccccccccccccccce2egejede\eheeeeeeeef|flf{ffqfyfjfrgi hihi*hhhihhhhhiihhihiiphihhihhhhhi i ihhhhhhhihhii%hk9k;k?k?ef׀QOPԁCJROG=M:<=?u;σ#ƃȃヿ݃؃˃΃փɄ ބƒՃǃуÃă׃ۃ؆ӆچ݆܆׆шHVU׈ɉ݉ډۊNM9Y@WXDERHQJLO_؍Ӎ͍Ǎ֍܍ύՍٍȍ׍Ŏ-4/,ad_b` %& '${~–ȖÖlpnNNNPPPPPPPPPPPPPPPPPQRzRxR{R|UUUUUUUUUUUUUUUUUUUUUUUWXSXhXdXOXMXIXoXUXNX]XYXeX[X=XcXqXZZZZZZZZZZZZZZZZZZZZ[[[\\3]q]c]J]e]r]l]^]h]g]b]^O^N^J^M^K^^^^^_@__`aIaJa+aEa6a2a.aFa/aOa)a@b hb#b%b$cccddd d d$d3dCdddd9d7d"d#d d&d0d(dAd5d/d dd@d%d'd cdd.d!deoeefffffffffxg ifi_i8iNibiqi?iEiji9iBiWiYiziHiIi5ili3i=iehixi4iii@ioiDiviXiAitiLi;iKi7i\iOiQi2iRi/i{iF 2*-<:15B&'8$0뉝芫=hiՌό׍   # "$!zrysvzy}~-X}z~{Ηٙ͘ǚ>?`a_PQQ0PQQPPQ Q PQ RRRRVHVBVLV5VAVJVIVFVXVZV@V3V=V,V>V8V*V:WXXXXXXXXXXZZZZZ[Z[Z[[[[\g]]]]]]]]]]]]^i^]^`^\}^^^_I_aaayaaaaaaaaaaaaaafab-dndpddddddddddddhddevezeye{eefffffffjjjiijiij iiijjij'iijiij@jiij iij jjj%jij&jijkQkkkkllkloAo&o~oooooooboOooZoovolooUoroRoPoWooo]ooaoko}ogooSooiooocowojo{qqqqqqqqqqqqqqqqqrrsXsRs^s_s`s]s[sasZsYsbtttttt}ttt|tyuuu~v%vvvvv#vv(vvvvvwwwwxxxxxxxxxxxyyyyyykvz9zzz{{{{{{{{{||||}}}}}}~}}}}}}}vdgOSRPNQ$;)  '+ *(.1& 0 /bVcdwsXT[RaZQ^mjPN_]olzn\eO{ubgiZ   ϊƊӊъԊՊ׊Ŋ؊Êٌ>Mߌٌڌ݌獠 #%$.&',$ #spogk/+)*2&.ВÒĒْϒߒؒגݒ̒’ʒȒΒ͒Ւɒޒђƒ|ӗZЗϘ&)( 'ܙ͙ϙәԙΙəؙ֙˙י̚FCgtqfvuphdlӟQQQQQQS4SVpV`VnVsVfVcVmVrV^VwWWXXXXXXXX[[[[![[[[[([[ [[]]]]]]]]]]]]]^g^h^f^o^^^^^_K_aaaaaaaaaaaaddddddddddde3ee|effffffffffg#j4jfjIjgj2jhj>j]jmjvj[jQj(jZj;j?jAjjjdjPjOjTjojij`j[qNnuUg`f]Telcedy&0-.'1")#/,݋ߊȊފln3>8@E6<=A0?6.52974vy{356'z8<#F- ˓%4$)95* ͕ԗ 5/2$')皹3|~{z}% )"՞֞=Q&Q%Q"Q$Q Q)RVVVVVVV~VVVXXXX[-[%[2[#[,['[&[/[.[{[[]^l^j__aaaaaaaaaddddddeeeefjjjjjjjjjjjjjjjjjjjjjjjk[kl ooooooooooooooqqqqqqqsssnsotttttttttuuuuuvCvHvIvGvvwwwwwwwwwxxyxxxyxxyyyz\z[zVzXzTzZzzz||{|{{|{| {|| ||{{|{{|| |~-~<~B~3H~8~*~I~@~G~)~L~0~;~6~D~:E~},ā́ʁŁǁ[Z\{w|zxWyvhŇɇLJ̇ćʇއ53<>AR7B " OprqooNMSPLGC@~8dVG|X\vIPQ`mLjyWUROqw{a^cgNYǕɕÕŕ ՗ԗADJIEC%+,*32/-10H3Ag6./180EBC>7@=-Ȟڞ$#"TQ1Q-Q.VVVVVVYp[<\i\j]^m^naaaaaaaaaadeddeedeefffjjjjjjjjjjjk^kl pp p ppppopop&oop rqqrqsvttttttttuuv\vdvYvPvSvWvZvvvwwxy yyy yyyyyz_||)|| ||-||&|(|"|%|0~\~P~V~c~X~b~_~Q~`~W~SuсЂ_^ƅŅDžą˅΅ȅŅ҆$iۇ߇ԇ܇Ӈ؇㇤ׇو݉SKOLFPQI*'#305G/<>1%7&6.$;=:Bu\b`WV^eg[Za]iTFGHK(:;>ҕӕіז]–ߖؖݗ#"%חٗ֗ؗPQRA<:  ܛ)5JLKǛƛÛӛě\SOJ[KYVLWRT_XZߟ%+*)(LUQ4Q5RRSVVVVVVXXXY[=[>[?]^p_aeee e e eeeefjjjjjjjjjjjjjk`kl pp'p pp+p!p"p#p)pp$pp*r r rrrrrrrrttttuv`wwwwyyy!yyyyzgzh|3|<|9|,|;||~v~u~x~p~w~o~z~r~t~hKJxׁՂdacمڅׅ؅߅܅хޅ  bZ[Wa\X]YPHJ@SVTKUQBRWCwv mxsjo{RQOPS@?ޓǓϓ“ړГ̓ٓʓԓՓēΓғ}ڕۖ)+,(&ݗޗߘ\Y]WHGC%$" '#›  7ޛԛכܛٛ՛ڝwqx}ktupis{oyh-@AMVWXS7VVVX[E]]^^__aeeeeefffjjjjjjjjp02.3vtsEdcbU]W^ėŘVY RXPJMKUYLNžО876COqpnoVV[N\me-ffkp_pap]p`r#ttwy8yy|j~mC875K”khiFCGǗ^՛Ycgfb^` FtuvVe.ekkkkpbr&rwwy9|i|k|~~~~FGHyz|{nmoqsIr_hnm  Gx{zyWpf|o<Ôtxvu`tsqu phpe|j>=?ɗKst̙adfg$Hbkr'Lih.r)Kyvukzpipj~IXML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS/Encodings/euc-kr.enc000644 000765 000024 00000131352 11254652014 024174 0ustar00pcimprichstaff000000 000000 EUC-KR}F  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~}?A}A;AAAuA3AAAmA+AAA eA #A A A ]A A AAUAAAAMA AAAEAAAA=A?AA^AAAxA'_AAAVA A` A`!A`!}A!A"A#YA$A$A%A&QA'A'A(A)IA*A*A+A,AA,A-A.{A/9A/A0A1sA21^2^3M^3^4 ^4g^4^5#^5^5^6=^6^6^7W^7^8^8q^8^9-^9^9^:G^:^;^;a^;^<^<{^<^=7^=^=^>Q^>^? ^?k^?^@'^@^@^AA^A^A^B[^B^C^Cu^C^D1^D^D^EK^E^F^Fe  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{| !"#%&'()*+.234567:;=>?ABCDEFGHIJLNOPQRSUVWYZ[]^_`abcdefghijklmnorsuvy{|}~¬ìŬƬǬɬʬˬͬάϬЬѬҬӬԬ֬ج٬ڬ۬ܬݬެ߬ !"#$%&'(*+./0123679:;=>?@ABCFHJKLMNOQRSUVWYZ[\]^_`bdefghijknoqrwxyz~­íŭƭǭɭʭ˭̭ͭέϭҭԭխ֭׭ح٭ڭۭݭޭ߭  !"#$%&'()*+,-./23569;<=>?BDGHIKOQRSUWXYZ[^bcdfgjkmnoqrstuvwz~®îŮƮǮȮɮʮˮήҮӮԮծ֮׮ڮۮݮޮ߮  !"#$%&'()*+./1356789:;>@DEFGJKLMNOQRSTUVWXYZ[^_`abcfghijklmnopqrstuvwxz{|}~¯ïįůƯʯ̯ϯЯѯүӯկ֯ׯدٯگۯݯޯ߯  !"#$%&')*+,-./0123456789:;<=>?@ABCFGIKMOPQRVXZ[\^_`abcdefghijklmnopqrstuvwxyz{~°ðưʰ˰̰ͰΰϰӰհְװٰڰ۰ܰݰް߰  !"&')*+-./01236:;<=>?BCEFGIJKLMNORSVWYZ[]^_abcdefghijklmnopqrstuvwz{}~±ñıűƱDZȱɱʱ˱ͱαϱѱұӱֱױرٱڱ۱ޱ !"#$%&'()*+,-./012356789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWYZ[]^_abcdefgjklmnopqrsvwxyz{}~²òIJŲƲDzʲ˲ͲβϲѲӲԲղֲײڲܲ޲߲  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSWYZ]`abcfhjlmorsuvwyz{|}~³óƳdzɳʳͳϳѳҳӳֳسڳܳ޳߳ !"#$%&'*,-./012356789:;<=>?@ABCDEFGHIJKLMNORSUVWYZ[\]^_bdfghijkmnopqrstuvwxyz{|}~´ôŴƴǴɴʴ˴̴ʹδϴѴҴӴԴִ״شٴڴ۴޴ߴ  !"#&+,-./235679:;<=>?BFGHIJNOQRSUVWXYZ[^bcdefghijklmnopqrstuvwxyz{|}~µõŵƵǵȵɵʵ˵εҵӵԵյֵ׵ٵڵ۵ܵݵ޵ߵ  !"#$&'()*+-./012356789:;<=>?@ABCDEFGIJKLMNOPQRSTUVWXYZ[\]^_`abcefgijklmnopqrstuvwxyz{|}~¶öĶŶƶǶȶɶʶ˶̶Ͷζ϶жѶҶӶնֶ׶ضٶڶ۶ܶ޶߶  !"#$%&'*+-.1234567:<=>?@ABCEFGIJKMNOPQRSVWXYZ[\]^_abcefgijklmnortvwxyz{~·÷ķŷƷȷʷ˷̷ͷηϷзѷҷӷԷշַ׷طٷڷ۷ܷ޷߷  !"#&')*+-./01236:;<=>?ABCEFGHIJKLMNOPRTUVWXYZ[^_abcefghijknprstuvwyz{}~¸ĸƸǸȸɸʸ˸͸θϸѸҸӸոָ׸ظٸڸ۸ܸ޸ !"#$%&'()*+,-./0123456789:;>?ABCEFGHIJKMNPRSTUVWZ[]^_abcdefgjlnopqrsvwyz{}~¹ùĹŹƹǹʹ˹͹ӹԹչֹ׹ڹܹ߹  !"#$%&'()*+,-./01234567:;=>?ACDEFGJLOPQRVWYZ[]^_`abcfjklmnorsuvwyz{|}~ºúźƺǺɺʺ˺̺ͺκϺкѺҺӺԺպֺ׺ںۺܺݺ޺ߺ !"#$%&'(*,-./012379:?@ABCFHJKLNQRSUVWYZ[\]^_`bdefghijkmnopqrstuvwxyz{|}~»ûŻƻǻɻʻ˻̻ͻλϻѻһԻջֻ׻ػٻڻۻܻݻ޻߻  !"#&(*+,./235679:;<=>?BFGHJKNOQRSTUVWXYZ[\^_`abcdefghijklmnopqrstuvwxyz{|}~¼üżƼǼȼɼʼ˼̼μҼӼԼּ׼ټڼۼݼ޼߼  !"#%&'()*+-./0123456789:;<=>?ABCDEFGJKMNOQRSTUVWZ[\]^_`abcefgijklmnopqrstuvwxyz{|}~½ýĽŽƽǽȽɽʽ˽̽ͽνϽнѽҽӽֽ׽ٽڽ۽ݽ޽߽  !"#$%&'()*+,-./0123456789:;<=>?@ABCFGIJKMOPQRSVX\]^_bcefgiklmnorvwxyz~¾þľžƾǾȾɾʾ˾̾;ξϾҾվ־پھ۾ܾݾ޾߾  !"#$%&'()*+,-./0123456789:;<=>?BCEFGIJKLMNORSTVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¿ÿĿƿǿȿɿʿ˿οϿѿҿӿտֿ׿ؿٿڿۿݿ޿  !"#$%&'()*+,-./0123456789:;=>?@ABCDEFGHIJKLMNOPRSTUVWYZ[]^_abcdefgjklmnopqrstuvwxyz{|}~ !"%()*+.23457:;=>?ABCDEFGJNOPQRSVWYZ[]^_`abcfjklmnoqrsuvwyz{|}~ !"#$%&'*,.0356789:;<=>?@ABCDEFGIJKLMNORSUVWYZ[\]^_abcdfghijknoqrsuvwxyz{~€‚ƒ„…†‡Š‹ŒŽ‘’“”•–—™šœžŸ ¡¢£¦§©ª«®¯°±²³¶¸º»¼½¾¿  !"#&'*+,-./0123456789:;<=>?@ABCDFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgjkmnoqstuvwz{~ÀÁÂÃÅÆÇÉÊËÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ  !"#%&'()*+-./12356789:;>?@ABCDEFGIJKLMNOPQRSTUVWXYZ[\]^_`abcfgijkmnopqrsvwxz{|}~āĂ㥹ĆćĈĉĊċČčĎďĐđĒēĕĖėĘęĚěĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĹĺĻĽľĿ  !"#$%&'*+-./1234567:<>?@ABCFGKOPQRVZ[\_bcefgijklmnorvwxyz{~ŁłŃŅņňʼnŊŋŎŐŒœŔŖřŚśŝŞşšŢţŤťŦŧŨŪūŬŭŮůŰűŲųŶŷźſ  !"#&')*+/1268:<=>?BCEFGIJKLMNORVWXYZ[^_abcdefghijkmnprstuvwz{}~ƁƂƃƄƅƆƇƊƌƎƏƐƑƒƓƖƗƙƚƛƝƞƟƠơƢƣƦƨƪƫƬƭƮƯƲƳƵƶƷƻƼƽƾƿ "#%&')*+,-./24689:;>?ABCEFGHIKNPYZ[]^_abcdefgijlmnopqrsvwyz{ǀǁǂdžNjnjǍǏǒǓǕǙǛǜǝǞǟǢǧǨǩǪǫǮǯDZDzdzǵǶǷǸǹǺǻǾ !"#%&'()*+.02345679:;=>?ABCDEFGJKNOPQRSUVWXYZ[\]^_`abcdefghijklmnorsuvwy{|}~ȂȄȈȉȊȎȏȐȑȒȓȕȖȗȘșȚțȜȞȠȢȣȤȥȦȧȩȪȫȬȭȮȯȰȱȲȳȴȵȶȷȸȹȺȻȾȿ 000 % &0 "%<"<    0000 0 0 0 0 0000"`"d"e""4 2 3!!+&B&@" "#"""a"R ;&&%%%%%%%%%%%!!!!!0"j"k""=""5"+","" """""*")"'"( !"#$%&'()*+-./012356789:;<=>?@ABCDEFGHIJKLMNORSUVWYZ[\]^_bdefghijkmno!!""^".""! 0%%%%&d&`&a&e&g&c"%%%%%%%%%%%&h&&&& !!!!!!&m&i&j&l22!3!"33!!qrsuvwxyz{}~ɀɁɂɃɄɅɆɇɊɋɍɎɏɑɒɓɔɕɖɗɚɜɞɟɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿ  !"#$%&'()*+,-./0123456789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]  !"#$%&'(*+,-./0123456789:;<=>?@ABCDEF1112131415161718191:1;1<1=1>1?1@1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z1[1\1]1^1_1`1a1b1c1d1e1f1g1h1i1j1k1l1m1n1o1p1q1r1s1t1u1v1w1x1y1z1{1|1}1~1111111111111111GHIJKNOQRSUVWXYZ[^bcdefgijklmnopqrstuvwxyz{|~ʀʁʂʃʅʆʇʈʉʊʋʌʍʎʏʐʑʒʓʔʕʖʗʙʚʛʜʝʞʟʠʡʢʣʤʥʦʧ!p!q!r!s!t!u!v!w!x!y!`!a!b!c!d!e!f!g!h!iʨʩʪʫʬʭʮʯʰʱʲʳʴʵʶʷʸʹʺʻʾʿ %%% %%%%%,%$%4%<%%%%%%%#%3%+%;%K% %/%(%7%?%%0%%%8%B%%%%%%%% %%%!%"%&%'%)%*%-%.%1%2%5%6%9%:%=%>%@%A%C%D%E%F%G%H%I%J "#$%&'()*+,-./0123456789:;<=>?@BCDEFGJKMNOQRSTUVWZ[\^_`abcefghijkl333!3333333333333333333333333333333333333333333333333333!&3333333333333333333333mnopqrstuvwz{|}~ˀˁ˂˃˄˅ˆˇˈˉˊˋˌˍˎˏːˑ˒˓˔˕˖˗˘˙˚˛˝˞˟ˠˡˢˣˤ˥˦˧˨˩˪˫ˬ˭ˮ˯˰˱˲˳˴˵˶˷˹˺˻˼˽˾˿&2?ARfJ2`2a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2r2s2t2u2v2w2x2y2z2{$$$$$$$$$$$$$$$$$$$$$$$$$$$`$a$b$c$d$e$f$g$h$i$j$k$l$m$n!S!T![!\!]!^  #$'138@BSgKI2222222222 2 2 2 2 22222222222222$$$$$$$$$$$$$$$$$$$$$$$$$$$t$u$v$w$x$y$z${$|$}$~$$$$ t  %&*+-/1234567:?@ABCFGIJKMNOPQRSVZ[\]^_abcegijklmnoqrstvwxyz{|}~̀́̂̃̄̅̆̇̈̉̊̋̌̍̎̏̐̑̒̓0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0[0\0]0^0_0`0a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0{0|0}0~000000000000000000000̶̷̡̢̧̛̖̗̝̞̟̣̤̥̦̪̮̯̰̱̲̳̹̺̻̔̽̾̿̕̚00000000000000000000000000000000000000000000000000000000000000000000000000000000000000  !"#%&')*+-./012345678:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_ !"#$%&'()*+,-./012345Q6789:;<=>?@ABCDEFGHIJKLMNOabcefghijknprstuvwyz{|}~͇͉͍͎̀́͂̓̈́͆͊͋͌ͅ͏͓͖͙͚͐͑͒͗͛ͣͦͨͪͫͬͭͮͯ͟͢͝͞͠͡ͱͲͳʹ͵Ͷͷ͸͹ͺͻͼͽ;Ϳ "#%&')*+,-./246789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWZ[]^bcdefgjlnopqrsvwyz{}~΀΁΂΃ΆΈΊ΋Ό΍ΎΏΒΓΕΖΗΙΚΛΜΝΞΟ΢ΦΧΨΩΪΫήίΰαβγδεζηθικλμνξο  $,-/0189<@KMTX\pqtwxzĬȬ̬լ׬ !"#%&'()*+.2345679:;<=>?@ABCDEFGHIJKLMNOPQRSVWYZ[]^_`abcfhjkl  ),-458?@ABCFHJKLMNOQRSUVWYZ[\]^_abcdefghijknoqrsuvwxyz{~ЀЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГД߱  4?BFGHIJKNOQRSUVWXYZ[^`bcdefgijkm@ACDEKLMPT\]_`aĵ̵͵ϵеѵص%,4HdhԶ(),/089;DHLTU`dhpqsu|}nopqrstuvwxyz{}~рстухцчщъыьэюяѐёђѓєѕіїјљњћќѝўџѢѣѥѦѧѩѪѫѬѭѮѯѲѴѶѷѸѹѻѽѾѿϷǷɷ $%(,45789@DQS\]`dlmoqx|øŸ̸иԸݸ߸ <=@DLOQXY\`hi  !"#$%&'()kmtux|ȹɹ̹ιϹйѹҹعٹ۹ݹ޹89<@BHIKMNSTUX\deghipqtxĺȺغٺ*+./12356789:;>@BCDEFGIJKLMNOPQRSTUVWXYZ[]^_`abcefghijklmnopqrstuvwxyz{|}~҂҃҅҆҇҉ҊҋҌ  )+4568;<=>DEGIMOPTXaclĻȻлӻ $%')-0148@ACDEILMP]ҍҎҏҒғҔҖҗҘҙҚқҝҞҟҡҢңҥҦҧҨҩҪҫҭҮүҰҲҳҴҵҶҷҺһҽҾļͼϼмѼռؼܼ $,@HILPXYdhԽսؽܽ DEHLNTUWYZ[`ad "#$&'*+-./1234567:>?@ABCFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghihjpqstu{|}оѾԾ׾ؾ @ADHPQUſ̿ͿпԿܿ߿?ABCEFGHIJKLMNOPQRSTUVWXYZ[]^_abcefghijklnpqrstuvwz{}~ԁԃԄԅԆԇԊԌԎԏԐԑԒԓԕԖԗԘԙԚԛԜԝ4<=HdehltuyĀĔĜĸļ (),089;=DEHIJLMNSTUWXY]^`adhpqstu|}ŀńŇŌōŏőŕŗŘŜŠũŴŵŸŹŻżŽžԞԟԠԡԢԣԤԥԦԧԨԪԫԬԭԮԯ԰ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿ $%(,-.034579;@ADHPQSTU\]`loqxy|ƀƈƉƋƍƔƕƘƜƤƥƧƩưƱƴƸƹƺ  !"#$%&'()*+,-./0123456789:;>?ABCEFGHIJKNPRSTUVWZ[]^_abc  !$(01357<=@DJLMOQRSTUVWX\`hktux|}~ǃDŽDžLJLjljNJǎǐǑǔǖǗǘǚǠǡǣǤǥǦǬǭǰǴǼǽǿ dfgjlnopqrsvwyz{}~ՀՁՂՃՆՊՋՌՍՎՏՑՒՓՔՕՖ՗՘ՙ՚՛՜՝՞՟ՠաբգդզէըթժիլխծկհձղճմյնշոչպջռսվտ $,-/18<@HILMTpqtxzȀȁȃȅȆȇȋȌȍȔȝȟȡȨȼȽ ,4PQTX`aclpt|ɈɉɌɐɘəɛɝ !"#%&'()*+,./01234567:; )LMPT\]_`ah}ʄʘʼʽ !AHILPXY]dxy˜˸ !"'(),.089;=>?ABCDFGJLNOPRSVWYZ[]^_`abcdefhjklmnorsuvwxyz{|}~րցւքֆևֈ։֊֋֎֏֑֖֛֢֣֤֥֦֧֪֚֒֓֕֗֘֙֜֞֠֩<=>DEHLTUWXY`dfhpų̴̵̸̘̙̜̠̩̫̬̭̼ $(,9\`dlmoqx͈͔͕ͤͥͧͩ͘͜Ͱ  !$(0135ֱֲֳִֵֶַָֺּֽ֭֮֫֯־ֿ XY\_`ahikmtux|΄΅·ΉΐΑΔΘΠΡΣΤΥάέ $,-/018TUX\degipqtxπυόϡϨϰ-458<!"#$%&'*,./0123679:;=>?@ABCEFHJKLMNORSUZ[\]^_bdfghjkmnoqrsuvwxyz{~׀ׂ׃ׅׄ׆ׇ׊׋DEGIPTX`lmpt|}ЁФХШЬдезй 0148:@ACDELMPT\]_ahl|фшѠѡѤѨѰѱѳѵѺѼ ,-04<=?AH\׍׎׏בגדהוזחךלמןנסעףdҀҁ҄҈ҐґҕҜҠҤҬұҸҹҼҿ  !%(),089;<=DE|}ӀӄӌӍӏӐӑӘәӜӠӨөӫӭӴӸӼ@D\`dmoxy|ԀԂԈԉԋԍԔԩ <=@DLMOQXY\`ehikmtux|ՄՅՇՈՉՐե $-89<@EHIKMQTUX\gipqtփօ֌֍֐ְֹֻ֔֝֟֡֨֬ ()+-458ahe9iouvv{U[WQ|P(S\E]bcnddn py[ݎ}EN~NPe]^aiWqTGu+N^Pgph@Q RRjwR`/PHacdhpLt/t{Pʼnܙ(R.`]bOQIS!X^fm8prs{P[SfckNVPXJX`*a'biЛA[}_NPTU[ ]]e*eNh!jKrvw}^NߏNʙUNNEN]NOQwRS@SSTVWuW[]^abeQggikPkklBnpxrstwwzv}  ߈b3dҚEןW \@ʗTzَ͐X\Hcz[_zyzP&R8RSwWbcrk mw7SsWhvg:jopm̙Kfwkx<SW-YNcisxEzz|us5RWGuG{`̒jXQKRKRbhiuPRRaeh9it~{K뉲9љI NYdfjt4yy~_ &O S`%bqlr}}fNQbw܀OOQvQUVhW;WWYYGY[\]]^~_beeggg^hhj_k:l#l}lmst&t*ttuxuxxyAyGyHyz{}}-OHw!$Qe}OvT bhTUQ: Za bbfqV cOczSW!gi`ns"u7#$%} &'rVZ()*+,NC-QgYHg.Ys^tdy_`lbc{[[R/Yt_)`012tY3456789:;<=>?@ABCoDE`FGfHI\?JKLMNOPQZ%g{}RSTUVWXY\r-RL]Pde,ko|C~͉dbɁ؈^gmjrttoO] _ QcueNPQiQhj|||oҏOQ7RTB^anb>ejoy*܈#bjRfkwpy+bBabe#o#qIt}o&#JQRRm pȈ^eko|>suNO6V_\]`s{-΀F4HaOoyR`ddjo^prv\2ouxy}ɓX_g'p't|`~Q!p(rbxʌŒڌNP[^eqvBwJ|'XZA\bjmov;}/~78KRegimAnpt t`uYv$xk,^Qmb.xOP+]m}*_aDhaRҀQQi^z}uOR)STU\e`gNhmlrrttbu|lyψ̑ЖTo~qtWgmt3x,z{ |ditjuxx虬T[^Uo NSMZ)]_Nabc=fifno+pcw,;E;Ubg+l jzNY__g}T+WYZ[f'ghkqdu㐁EL@[_lsvv߄ QQMQRhlww }}bnŅQT T}ffi'nvw‡iOQRY^=aUdxdyfgj!kkr_ratAw8wۀ(g(lrgvwfzFklY"g&SoXY^cf4gsn:s+zׂד(R]aab bdeiYkfkq!su]~Fj'aXPRT;UOelv} } ^RlriTsZ\>]K_L_g*hicneef ginx}!+*2P OcW_bcgonCqvÀ̀ڈ)MjO/Op^gh"v}v~D^aj qiqujd~ACO{OpQ^hl>lNlr{ălt:PRXdjtvVx9eS^_R%wINPQu\[^wff:ghpuuyzݏ' OX!X1[fnkemnzo}su+܉\OPSS\[_g yy/9;g,NvOYI\\\cghpqt+~+"ҜN NOPRVRoT&TWY+Zf[Z[u[^fbvewemnnr6{&|?6PQ@tܖDٜSRT)VtXYTYn_abnfl~qv||}gO[__b])g hx|~ClNPSS*SQYZb^`abIbyegikkkklht5uxxyy|}ဥ>ƒ芹l^۟;V[*_lejkm\opr]sӘ;al7XNMNNNO:Oy@y`y{}}r цLjߊP^܍fߞRJigjPR*\qeclUsu#u{x0Nwdkq^N kgIhnkcoN PPQUFUV[@\\^8^^^`hQjanXr=r@rvye{ԈsaޗX^tUlza}"rrruu%m{XX]^^_`UbceMfffhhrt^{n}n}r͟ YYm^-`ffsglPmo_wxƑ˓+NPQHU[ [bGe~en2q}ttDttvly}~Uz9ux%MSh\QiTlm)n+ ;-gRafk~ ]emqnWY[`'`bff_s)svw{lVreNRkrmz{9}0oSV/XQ[\\]b@cdf-hlmnppqu&uuv{{|+} }9,m4 a7O\lg_m|~[k]d \s[`g~mފ R7ppQxpOSUVWXZ[\\^%ab bKcde6exj9kl4mo1qrsxttv&wayzWz|}}~a)1څꈖ8Bl֗ӛSX~Y[p[moZqt!t]__`BehiojSkm5msvw{M}#@cbđb Se]]']it_hob҉6rNNXPRSGbf~i^OSV6YZ\8\N\M^_`Cef/fBggswy:ń͉fiUzW[_`obi kn\q{҇UXߘO8OOT{Z [aT3UXbXYgZ[`aeVefdhlZopqsR{}2\KlsDs:ntevzi~ Q@Xdtuvp͙Tn&tzzهxZI[[himcstt,x}UL.f_egljsP-ZkjwY]l]s%uOPQX/Y-YY[]bdddfjHqtdzz~G~^p‡ YÐRa~k2mt~%OPQRWX[^aBimngnqtbu(u,s8Ɏ NOQPvQ*SSS[[\$aaer[st@vyPyy}Ն^GꖅR_gef1h/q\z6 NjRkoqSK1NqQCSTWWWZZ[`(a?clm9nrnr0s?tWшE`ƖbXg^OMPIPSqW YZ\ apfn-r2tK}Äf?_[U˛ONsOQQjU/U[z[^|^}^``aa ce8g ggiaiblm'n8os6s7t\u1vR}8Պۊ0BJ>zIɓnX kӀQAYk\9odsגۀbp}hW`iaGkNYTm-pcl㐑QaɁOPQ[aadikuwdcpNNO Y7Y]__[`!r>supuy 3Q茽 p7vNNRSpTVY[__nn}j5mwNOZO~Xen8NXYY`AzOQeSDNRi[UNR:TYY[P[W[\`caHnpqnstux}+(ɊǖO\RVef(p|pr5}Lr[qhkozv\fo[{|*6NNS X4XXYl\^3^_5cfgVjjk o?rFsPtz|x߁烊l#ψݍwQTW([bMgPh=hn=np}~! KNr-{͓OGONQ2TY^bguinjlnrs*u{}5W[Ο_RT Z[dXeunrvzM{|M~>߃{+ʍd_iOCOzPQhQxRMRjXaX|Y`\\U^`b0hkloqNt u0u8uQvr{L{{{~n>I?"+ZkRb*bmYvdz{}vS`\^o8p|cdzvNNNP\PuTHY[^@^^_`c:e?etefvfxgihjkcl@mmnn^ppssu:w[xyz z}|}Gꌞ-Jؒf̓ V\R6RU|X$^_`choym{,ͅDd=LJOQFQRV2__kcdefAffghhioonqgqr*tw:yVyZyz z||}D~pT m;՜e|[X\ SRbsP'[_`akhmt.z.}B}~1k*5~OPWP]^c+jN;OOOPZY݀TjThUYO[]^f]g1gh*lm2nJopsu|L}},}ۊ;p31NRDz|OQQW[\fYj=mZnoq uoz"!u˙N-NFS}jiklAzXafbpuu~RINKSTW0W@_ccdoe/efzggkbl`lo,wx%yIyW}󂝂rvzz7~TwUUXuc/d"fIfKhmikm%nsthtu[uvwwy~ ~/:ю돰2csOSYZ^hNtuyz̏egWoW}ݏ/_aoNOPSU]o]k!kdx{IʐncId>w@z/jdoqttz|~|~ }LR9[dg-}.PSXyaXaYaezًP P!RuU1Z<^_pa4e^f f6fino2sv!z9YքPW[[_icx&}܅!ǑQg{VQY`UPRT\:a}bbdenv `_NSCUY)]dlmszw!QTU_do}M5P\lmuw|=|dyXY^cwrRuwk܌^ftm}˗QRCfmn}.^RRTabbhiiZj5pq&x]yyyz xՃIIbOVqwׇ[_gQSXZ[`ad`~=p%dP]gXbciixjnkvy˂)ύKۚ6 Nu\y]z{Q{~.ĎYtf%i?tCQg.QE_l]w`ST9V4Z6\1pZ퍣_PtNS`n,\dOP$U\^_`ehlmquuvazzI}}n􆩏əRRGRŘ퉪NgoO[glmxtx'ݓ|yz1_NTU>XY`bSbg6iU5@P,SSUDW|bXdfkgoot"t88TQVWf_HakNpXp}Yj+cw=XTd-i[^noiQLSY*` aKklpl{΂ԍƐdodeQNTWa_hvu{R}qXí*9PxYWYb*a]ryWaZF]bddgwlm>r,t6x4wۘR$WBgrHt㌩*QkScLOiU`eWlmrLrz_mopaOPObArG{}MWj^sg UT [^c^_ e=[OHSS STTW^`bbcUlmfux2ށ/ބa ^EffprOR}_jaSgSjotyhhyǘĚCTziSJ_|buvBS9_<_lsubu{FNO\c>myrϘ0NQDRW_blnppPpqstiJaQn_W`agfYJNNNT|XXY}\_'b6bHf fgkmimnVnooop]rt%tZtvy\|~ႦkN_twje`bwZZfmn>t?B_`{T_l^lm*p}y ;ST[j:pkuuyyqAt de+xxzkN8UYP[^{`ckafehSnqet}i%m;ns>AQ^L_`M`a0aLfCfDiln_nobqLtv{|'RWQS/V^_`b`affgjmoppsj~j4ԊRsr[jkTV[]eHefhmmr;uMOPSTT?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~A=Z`^dy}{B>[a_ez~|T9 CGPXnpbU: DHQYoqcXML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS/Encodings/iso-8859-3.enc000644 000765 000024 00000002060 11254652014 024344 0ustar00pcimprichstaff000000 000000 ISO-8859-3  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~&$0^4{'%1_5|  l\  !m]XML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS/Encodings/iso-8859-4.enc000644 000765 000024 00000002060 11254652014 024345 0ustar00pcimprichstaff000000 000000 ISO-8859-4  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~8V(;`"f}W)<a#gJ~K. *EL6rhj/ +FM7sikXML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS/Encodings/iso-8859-5.enc000644 000765 000024 00000002060 11254652014 024346 0ustar00pcimprichstaff000000 000000 ISO-8859-5  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO!QRSTUVWXYZ[\^_XML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS/Encodings/iso-8859-7.enc000644 000765 000024 00000002060 11254652014 024350 0ustar00pcimprichstaff000000 000000 ISO-8859-7  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ XML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS/Encodings/iso-8859-8.enc000644 000765 000024 00000002060 11254652014 024351 0ustar00pcimprichstaff000000 000000 ISO-8859-8  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ > XML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS/Encodings/iso-8859-9.enc000644 000765 000024 00000002060 11254652014 024352 0ustar00pcimprichstaff000000 000000 ISO-8859-9  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~0^1_XML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS/Encodings/windows-1250.enc000644 000765 000024 00000002060 11254652014 025056 0ustar00pcimprichstaff000000 000000 windows-1250  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   & ! 0` 9Zd}y     "  !"a :[e~zA^{B_=>|T9 CGPXnpbU: DHQYoqcXML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS/Encodings/windows-1252.enc000644 000765 000024 00000002060 11254652014 025060 0ustar00pcimprichstaff000000 000000 windows-1252  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   & ! 0` 9R}     "  !"a :S~xXML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS/Encodings/x-euc-jp-jisx0221.enc000644 000765 000024 00000112002 11254652014 025705 0ustar00pcimprichstaff000000 000000 X-EUC-JP-JISX02214A  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~g?gL?^^PCKSVL8Q +^K^^^e^^!^^^;^^^U^^^o^^ +^ ^ ^ E^ ^ ^ _^ ^ ^ y^ ^ 5^ ^ ^O3^^>^^^X^^^r^^.^^^H^^^b^^^|^^8^^^R^^^l^^(^^^B^^^\^~Ca=}0VWWA^^^T^^^n^^ *^ ^ ^!D^!^"^"^^"^#^#x^#^$4^$^$^%N^%^& ^&h^&^'$^'^'^(>^(^(^)X^)^*^*r^*^+.^+^+^,H^,^-^-b^-^.^.|^.^/8^/^/^0R^0^1^1l^1^2(^2^2^3B^3C3  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOabcdefghijklmnopqrstuvwxyz{|}~PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~000 000@>?00000N0000  \0 \ & %     00;=[]00 0 0 0 0 0000 ""`"f"g""4&B&@ 2 3! &&%%%%%%%%%%% ;0!!!!0"" """""*")"'"(!!""" "#"""a"R"j"k""=""5"+",!+ 0&o&m&j !%!"#$%&'()*+,-./0123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0[0\0]0^0_0`0a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0{0|0}0~00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 !"#$%&'()*+,-./012345Q6789:;<=>?@ABCDEFGHIJKLMNO%%% %%%%%,%$%4%<%%%%%%%#%3%+%;%K% %/%(%7%?%%0%%%8%BNUZ?Tac(Y"uzP`cn%efhW'ebq[YІ{}b}b|[^c fhHǗgONO OMOPIVY7YZ\ `aapfipuOupy}}ÄcUzS;NNW߀xNXn8z2(/QASpTTVY_m-bpT S[p–So\zNxn&VUk;YSmftܕVBNKO SU[0_qf fhl8lm)t[vzN4[`muvʙ`iSQWX0YD[^`(cclopqqYqs?~vх`[XielZu%QY.Ye__bej*k'ksV,\l{Q\KahvraNYOSx`in)zON SNOUO=OOsRSV YZ[[yfggkLlpksyyz<{ۃwӇfV)NO\brYu;傽řNOVXJX^_`*``babbe9AffhmwppuLv}uQRYT[]ahimxˈWrmlWgΒRVT^bdhkSlWo"ooEtuvw z{|!}6f̌Qeә(N8T+\]svLw<\ TXOOSqUVhWYG[ [\^ ^~_cg:eeghhj_^0kll}uyH[cz}_w̏Z/__`hjtZxwN^NO|OPPQIQlRRRSSTTUWQWY}[T[][]]]^x^^^_`RaLbbce;ffCfgmh!hil_m*min/nu2vxlz?|}}}^}T*RLaʑuqx?M؝;R[RSTXboj_QKR;TJVz@w`sDo pu_`ښrۏkdNVWdXZZ`haffh9hmu}:nBNOPSU]o]]gltsxPWP^c+PPQgTX^Y[_ibMch=ksnp}rxx&yme}0܈ RdW(gPjQWB*X:iT]WxO\RJTd>f(ggz{V}"/h\{9SQR7[bddg-kvcLvfRN PS\q`dech_qsu#{~ۑxefkNNO:OR:SSUVXYYY[P\M^^+_`ce/[\eeegkbk{lsEyIy|}}+󉖊^ifnjܖ̘koNOtuxy: 3ꄔlP_X+z[NSWY1Z[`nou[{Prg\aJ~Q\chfeqny>}ʐnǐPR\:gSp|r5Lȓ+[_1`N;S[bKg1krsz.kRQSTj[cj9}VSTh[\1]Oabm2yy}B~MҁFrt/1KlƑNOOQESA_bglAn sc~&͒SY[my]~.|X~qQSO\f%wzQ_eiokmnodv}]uQRb@ffn^}rfRSYs^_`UdPQRS SGSTUFU1VYhYZ<[\\\\^^^_pbbbccwff f-fvg~hjj5lmn nXq d_xRbcdBb-z{}v INQHSCS`[\\]b&bGdhh4lmEmgo\qNq}ez{}~Jz9n΍xwRMUo8q6Qhy~U|VLXQ\cffiZruuyyVy|} }D4;a PRuSSP UXYOr=[\dS``c\cc?cdef]iioqNuvz|}}aIXlōpmPXaӅ5 OPtRGSs`ocIg_n,O\^e}SRQvc[X[k\ d gQ\NYY*lpQU>XY`bSg5iU@Ě(OSX[\^/_` aKb4flnހ΁Ԉ.ۛNSY'{,Lnp'SSUD[bXbblot"8o8QSSOFTYj1]zꏿhڌ7rHj=N9SXVWfbcekNmn[pwz{}=Ɔˊ[VX_>efjku7P$wW0_`efzl`uznE{u\z{QĐyz6Zw@N-N[_bft6x4ZFuO^bceWgovrL̀)MP WZhisqdrXjyw)O/ReSZbglv}{|6fo r~Q{xr{{Hj^auQu`QkbnvzOpb{OVzXY䖼O4R$SJSS^d,egl>lNrHrsuT~A,錩{đqic=fiujvxЅCS*SQT&Y^_|`bIbybekluvxy}w^j |8P\>_gkt5w ;gzS9u_f_<_ub{Feg llpx2~+ނ *JҘlNONPRVWJY^=__b?fgghQ}!~2T ,SPS\Xdg4rgwfzFRlkX^LYTg,QvdixTWYf'gkTi^UggRh]NOSbg+lO~mNabno+Tsg*E]{\[ƇnJzY|lw RY"q!r_wۗ'ai ZZQT T}fvߏYr]nQMh}}bdxj!Y[_ksv}Q2g(vgbR\$b;|~UO`} SN_QYr:6_%wS_y}3Vg󅮔Sa alvR8U/OQQ*RS[^}`acg gngms6s7u1yPՊJćYNOYN?P^|Y[^ccdfiJim nqu(zIɉ! e} a~bk2lmtmge}o#,TBojp2RZA^_gi|imjorbr{~KQmy2P-Tqkjā`gNNkhin~xU_ NNN*N1N6NzYUYPYNYZYXYbY`YgYlYiYxYYO^OYYYYYYYYZ%ZZZZ ZZ@ZlZIZ5Z6ZbZjZZZZZZZZZZZZZ[ [ [[2Z[*[6[>[C[E[@[Q[U[Z[[[e[i[p[s[u[xe[z[[[[[[[[[[[[[[[[[[\\\\ \\ \"\(\8\9\A\F\N\S\P\O[q\l\nNb\v\y\\\Y\\\\\\\\\\\\\]\] ]]]\]]]]]"]]]]L]R]N]K]l]s]v]]]]]]]]]]]]]]]]]]]]^ ^^^^^6^7^D^C^@^N^W^T^_^b^d^G^u^v^z^^^^^^^^^^^^^^^^^^^^^^^__ _]_\_ ___)_-_8_A_H_L_N_/_Q_V_W_Y_a_m_s_w____________________`_`!`````)``1```+`&``:`Z`A`j`w`_`J`F`M`c`C`d`B`l`k`Y`````````````````_````aMaa``a``aa!``a aaGa>a(a'aJa?acMdcOcccccvcccccckcicccccccccdd4ddd&d6edd(ddgdodvdNe*ddddddddddddddd ddbdde,ddddedeeee$e#e+e4e5e7e6e8uKeHeVeUeMeXe^e]erexeeeeeeeeeeeeeeeeegrf fegsf5f6f4ffOfDfIfAf^f]fdfgfhf_fbfpffffffffffffffffff?fffffgggg&g'8g.g?g6gAg8g7gFg^g`gYgcgdggpgg|gjgggggggggggggggggggggjhhFh)h@hMh2hNhh+hYhchwhhhhhhhhjhhthhhihh~ihihi"i&hi hhhhi6iihhi%hhhi(i*ii#i!hiyiwi\ixikiTi~ini9iti=iYi0iai^i]iijiiiiiiii[iiiiij.iiiiiiijjik iiijijijij jjj#jjDj jrj6jxjGjbjYjfjHj8j"jjjjjjjjjjjjjjjjjjjjkjkk1kk8k7vk9kGkCkIkPkYkTk[k_kakxkykkkkkkkkkkkkkkkkkkkkkkkkklllll$l#l^lUlbljllllll~lhlslllllllllllllllllmMm6m+m=m8mm5m3mm mcmmdmZmymYmmommnn mmmmmmmmmmmmmmmmmn-nnn.nnrn_n>n#nkn+nvnMnnCn:nNn$nnn8nnnnnnnnnnnnnnnnoAopLnnno?no1no2no>onoozoxooooo[oomoo|oXoooofooooooooooooooop p opppoppotpppp0p>p2pQpcppppppppppppq pqqqeqUqqfqbqLqVqlqqqqqqqqqqqqqqqqqqqqr rrr(r-r,r0r2r;rsNsOsWsjshspsxsus{szsssssssstttot%st2t:tUt?t_tYtAt\titptctjtvt~ttttttsttttttttttuuuu uu uuuu&u,uz7zCzWzIzazbzizpzyz}zzzzzzzzzzzzzzzzzzzzzzzzzz{{{ {{3{{{{5{({6{P{z{{M{ {L{E{u{e{t{g{p{q{l{n{{{{{{{{{{]{{{{{{{{{||{{|`|||{{|| {|#|'|*||7|+|=|L|C|T|O|@|P|X|_|d|V|e|l|u|||||||||||||||||||||;|||||}}}}} }E}K}.}2}?}5}F}s}V}N}r}h}n}O}c}}}[}}}}}}}}}}}~=}}}}}}}}}}}}}~~ ~#~!~~1~~ ~ ~"~F~f~;~5~9~C~7~2~:~g~]~V~^~Y~Z~y~j~i~|~{~}~}~~~~~~~~~~~~8:ELMNPQUTX_`higxq܀ !(?;JFRXZ_bhsrpvy}Qۀـ݀Āڀց )#/KF>SQqneft_Ɂ́сف؁ȁځ߁ )+83@YX]Z_dbhjk.qwx~߂҂ރ܃ ك5421@9PE/+#|su΃؄  " 8m*(ALONIV[Zk_lot}:A?HLNPUblxz|bȌڌ  N͍gmqsύڍ֍̍ۍˍߍ B504JGILPHYd`*cUvr|ƎŎȎˎێ  &3;9EB>LIFNW\bcdڏ!  '659OPQRI>VX^hovr}bHۑ20JVXceisrɑˑБ֑ߑۑ,^WEIdH?KPZϒD."#:5;\`|nV֓דؓÓݓГȓ6+5!:ARD[`b^j)puw}Z|~oÕ͕̕Օԕ֕ܕ!(./BLOKw\^]_frlΖ˖ɖ͉Mܗ Ֆ$*09=>DFHBI\`dfhRҗkqy|z×Ɨȗ˗ܗOzߗ 8$!7=FOKkopqtsĘØƘ !$ ,.=>BIEPKQRLUߙۙݙؙљ+7EB@C>UM[W_bedikjϚњӚԚޚߚ"#%'()*./2DCOMNQXtʛƛϛћқԛ:   .%$!0G2F>Z`gvx *&#DA?>FH]^dQPYrozĝƝϝٝӝuy}a̞ΞϞОԞܞޞݞv!,>JRTc_`afgljwrvX/iǐYtdQq~!"!    RSTUVWXYZ[\^_&2A?JRf'138B@IKSg  " $0*.(469=;CGEPLTXVZ\`^dblpjrnhtxvy}{   !%+/)57:><DHFQMUYW[]a_ecmqksoiuwz~|NNNN NNN#N$N(N+N.N/N0N5N@NANDNGNQNZN\NcNhNiNtNuNyNNNNNNNNNNNNNNNNNNNNNNOOOOO O OOOOOO.O1O`O3O5O7O9O;O>O@OBOHOIOKOLOROTOVOXO_OcOjOlOnOqOwOxOyOzO}O~OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPP P PPPPPPPPPP"P'P.P0P2P3P5P@PAPBPEPFPJPLPNPQPRPSPWPYP_P`PbPcPfPgPjPmPpPqP;PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQ Q Q QPQQQQQQQQ#Q'Q(Q,Q-Q/Q1Q3Q4Q5Q8Q9QBQJQOQSQUQWQXQ_QdQfQ~QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRR"R(R1R2R5RSBSLSKSYS[SaScSeSlSmSrSyS~SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTT!T'T(T*T/T1T4T5TCTDTGTMTOT^TbTdTfTgTiTkTmTnTtTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUU U U UUU*U+U2U5U6U;UW?WEWFWLWMWRWbWeWgWhWkWmWnWoWpWqWsWtWuWwWyWzW{W|W~WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXX WX X XXXX X&X'X-X2X9X?XIXLXMXOXPXUX_XaXdXgXhXxX|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYY Y YYYAYY!Y#Y$Y(Y/Y0Y3Y5Y6Y?YCYFYRYSYYY[Y]Y^Y_YaYcYkYmYoYrYuYvYyY{Y|YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZ Z ZZZZZ#Z$Z'Z(Z*Z-Z0ZDZEZGZHZLZPZUZ^ZcZeZgZmZwZzZ{Z~ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[4[[[[![%[-[8[A[K[L[R[V[^[h[n[o[|[}[~[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\ \\\\#\&\)\+\,\.\0\2\5\6\Y\Z\\\b\c\g\h\i\m\p\t\u\z\{\|\}\\\\\\\\\\\\\\\\\\\\\\\\\]]] ]]+]#]$]&]']1]4]9]=]?]B]C]F]H]U]Q]Y]J]_]`]a]b]d]j]m]p]y]z]~]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^ ^^^^^^ ^.^(^2^5^>^K^P^I^Q^V^X^[^\^^^h^j^k^l^m^n^p^^^^^^^^^^^^^^^^^^^^^^^^^^_________!_"_#_$_(_+_,_._0_4_6_;_=_?_@_D_E_G_M_P_T_X_[_`_c_d_g_o_r_t_u_x_z_}_~________________________________________`` ` ```````$`-`3`5`@`G`H`I`L`Q`T`V`W`]`a`g`q`~``````````````````````````````````````````aaa a aaaaaaaaaaa"a*a+a0a1a5a6a7a9aAaEaFaIa^a`alaraxa{a|aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbb b"b#b'b)b+b9b=bBbCbDbFbLbPbQbRbTbVbZb\bdbmbobsbzb}bbbbbbbbbbbbbbbbbbbbbbccc c c ccccc)c*c-c5c6c9cgEgGgHgLgTgUg]gfglgngtgvg{gggggggggggggggggggggggggggggggggghRhhhhh(h'h,h-h/h0h1h3h;h?hDhEhJhLhUhWhXh[hkhnhohphqhrhuhyhzh{h|hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhii i iiiiii1i3i5i8i;iBiEiIiNiWi[icidieifihiiilipiqirizi{iiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjjjjjjjj j$j(j0j2j4j7j;j>j?jEjFjIjJjNjPjQjRjUjVj[jdjgjjjqjsj~jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkkkkk kkkkkkk$k(k+k,k/k5k6k;k?kFkJkMkRkVkXk]k`kgkkknkpkuk}k~kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkllll l llllll&l'l(l,l.l3l5l6l:l;l?lJlKlMlOlRlTlYl[l\lklmloltlvlxlyl{llllllllllllllllllllllllllllllllmmm mmmmmm&m'm(lgm.m/m1m9mu?u@uCuGuHuNuPuRuWu^u_uauouquyuzu{u|u}u~uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvv v vvvvvvvvvvv#v%v&v)v-v2v3v5v8v9v:vwBwEwFwJwMwNwOwRwVwWw\w^w_w`wbwdwgwjwlwpwrwswtwzw}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxx x xxxx!x"x#x-x.x0x5x7xCxDxGxHxLxNxRx\x^x`xaxcxdxhxjxnxzx~xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyxxxxxyy yyyyyy y%y'y)y-y1y4y5y;y=y?yDyEyFyJyKyOyQyTyXy[y\ygyiykyryyy{y|y~yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzz z z zzzzz!z'z+z-z/z0z4z5z8z9z:zDzEzGzHzLzUzVzYz\z]z_z`zezgzjzmzuzxz~zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{#{'{){*{+{-{.{/{0{1{4{={?{@{A{G{N{U{`{d{f{i{j{m{o{r{s{w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|||||| | | ||||| |%|&|(|,|1|3|4|6|9|:|F|J|U|Q|R|S|Y|Z|[|\|]|^|a|c|g|i|m|n|p|r|y|||}|||||||||||||||||||||||||||||||}}}} }}}}}}}}#}&}*}-}1}<}=}>}@}A}G}H}M}Q}S}W}Y}Z}\}]}e}g}j}p}x}z}{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~}}}}}}}}}}}~~~~~~~~ ~'~(~,~-~/~3~6~?~D~E~G~N~P~R~X~_~a~b~e~k~n~o~s~x~~~~~~~~~~~~~<;=>?CDGORS[\]acdefmq}~  $&,.04579:<>@D`dfmquȀ̀πҀԀՀ׀؀  $',05:@CEMX]adeoqr{ȇɇʇ·Շևهڇ܇߇ (-.025:@BEFIORWZ[\abcknpsuz{|}ԉՉ։׉؉ "$&+,/57=>@CEGIMNSVWX\]aeguvwyz{~ÊƊȊɊʊъӊԊՊ׊݊ߊ  -07EGIKOQSTWX[]Ycdfhimsuv{~ŌƌɌˌό֌Ռٌ݌ eilnōƍǍȍʍ΍эԍՍ׍ٍ  !"#&'136789=@AKMNOT[\]^abilmopqyz{ÎĎǎώюԎ܎ !#%'(,-.4567:@ACGOQRSTUX]^eƏʏˏ͏ЏҏӏՏ ()/*,-347?CDL[]bfglpty̐ÐĐŐǐȐՐאِؐܐݐߐҐ  %"#')./14679:<=CGHOSWYZ[adgmtyz{‘Ñőӑԑבّڑޑ #$%&(./035689:<>@BCFGJMNOQXY\]`aeghinopuvwxy{|}’ÒŒƒǒȒ˒̒͒ΒВӒՒגْؒܒݒߒ !$%')*3467GHIPQRUWXZ^degijmopqstvz}ēœƓǓɓʓ˓͓̓ӓٓܓޓߓ ./1234;?=CEHJLUY\_achkmnoqrxy~ƕȕɕ˕Еѕҕӕٕڕݕޕߕ"$%&,13789:<=ARTVWXant{|~ʖ]ؖږݖޖߖ !"#(13ACJNOUWXZ[cgjnsvwx{}ėŗǗɗʗ̗͗ΗЗїԗחؗٗݗޗۗ   #&+./0235%>DGJQRSVWYZbcefjl˜ŘȘ̘"&'+123459:;<@AFGHMNTXY[\^_`Ùəәԙٙڙܙޙ  "#$'-.3568GADJKLNQTV]ÚƚȚΚКҚ՚֚ךۚܚ  &+-34579:=HKLUVW[^acefhjklmnsuwxyǛțΛЛכ؛ݛߛ "#&'()*1567=ACDEIJNOPSTVX[]^_cij\khnpruw{ /0234:?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~g?gL?^^PCKSVL8Q +^K^^^e^^!^^^;^^^U^^^o^^ +^ ^ ^ E^ ^ ^ _^ ^ ^ y^ ^ 5^ ^ ^O3^^>^^^X^^^r^^.^^^H^^^b^^^|^^8^^^R^^^l^^(^^^B^^^\^~Ca=}0VWWA^^^T^^^n^^ *^ ^ ^!D^!^"^"^^"^#^#x^#^$4^$^$^%N^%^& ^&h^&^'$^'^'^(>^(^(^)X^)^*^*r^*^+.^+^+^,H^,^-^-b^-^.^.|^.^/8^/^/^0R^0^1^1l^1^2(^2^2^3B^3C3  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOabcdefghijklmnopqrstuvwxyz{|}~PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~000 000@>?00000N0000  \0 \ & %     00;=[]00 0 0 0 0 0000 ""`"f"g""4&B&@ 2 3! &&%%%%%%%%%%% ;0!!!!0"" """""*")"'"(!!""" "#"""a"R"j"k""=""5"+",!+ 0&o&m&j !%!"#$%&'()*+,-./0123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0[0\0]0^0_0`0a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0{0|0}0~00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 !"#$%&'()*+,-./012345Q6789:;<=>?@ABCDEFGHIJKLMNO%%% %%%%%,%$%4%<%%%%%%%#%3%+%;%K% %/%(%7%?%%0%%%8%BNUZ?Tac(Y"uzP`cn%efhW'ebq[YІ{}b}b|[^c fhHǗgONO OMOPIVY7YZ\ `aapfipuOupy}}ÄcUzS;NNW߀xNXn8z2(/QASpTTVY_m-bpT S[p–So\zNxn&VUk;YSmftܕVBNKO SU[0_qf fhl8lm)t[vzN4[`muvʙ`iSQWX0YD[^`(cclopqqYqs?~vх`[XielZu%QY.Ye__bej*k'ksV,\l{Q\KahvraNYOSx`in)zON SNOUO=OOsRSV YZ[[yfggkLlpksyyz<{ۃwӇfV)NO\brYu;傽řNOVXJX^_`*``babbe9AffhmwppuLv}uQRYT[]ahimxˈWrmlWgΒRVT^bdhkSlWo"ooEtuvw z{|!}6f̌Qeә(N8T+\]svLw<\ TXOOSqUVhWYG[ [\^ ^~_cg:eeghhj_^0kll}uyH[cz}_w̏Z/__`hjtZxwN^NO|OPPQIQlRRRSSTTUWQWY}[T[][]]]^x^^^_`RaLbbce;ffCfgmh!hil_m*min/nu2vxlz?|}}}^}T*RLaʑuqx?M؝;R[RSTXboj_QKR;TJVz@w`sDo pu_`ښrۏkdNVWdXZZ`haffh9hmu}:nBNOPSU]o]]gltsxPWP^c+PPQgTX^Y[_ibMch=ksnp}rxx&yme}0܈ RdW(gPjQWB*X:iT]WxO\RJTd>f(ggz{V}"/h\{9SQR7[bddg-kvcLvfRN PS\q`dech_qsu#{~ۑxefkNNO:OR:SSUVXYYY[P\M^^+_`ce/[\eeegkbk{lsEyIy|}}+󉖊^ifnjܖ̘koNOtuxy: 3ꄔlP_X+z[NSWY1Z[`nou[{Prg\aJ~Q\chfeqny>}ʐnǐPR\:gSp|r5Lȓ+[_1`N;S[bKg1krsz.kRQSTj[cj9}VSTh[\1]Oabm2yy}B~MҁFrt/1KlƑNOOQESA_bglAn sc~&͒SY[my]~.|X~qQSO\f%wzQ_eiokmnodv}]uQRb@ffn^}rfRSYs^_`UdPQRS SGSTUFU1VYhYZ<[\\\\^^^_pbbbccwff f-fvg~hjj5lmn nXq d_xRbcdBb-z{}v INQHSCS`[\\]b&bGdhh4lmEmgo\qNq}ez{}~Jz9n΍xwRMUo8q6Qhy~U|VLXQ\cffiZruuyyVy|} }D4;a PRuSSP UXYOr=[\dS``c\cc?cdef]iioqNuvz|}}aIXlōpmPXaӅ5 OPtRGSs`ocIg_n,O\^e}SRQvc[X[k\ d gQ\NYY*lpQU>XY`bSg5iU@Ě(OSX[\^/_` aKb4flnހ΁Ԉ.ۛNSY'{,Lnp'SSUD[bXbblot"8o8QSSOFTYj1]zꏿhڌ7rHj=N9SXVWfbcekNmn[pwz{}=Ɔˊ[VX_>efjku7P$wW0_`efzl`uznE{u\z{QĐyz6Zw@N-N[_bft6x4ZFuO^bceWgovrL̀)MP WZhisqdrXjyw)O/ReSZbglv}{|6fo r~Q{xr{{Hj^auQu`QkbnvzOpb{OVzXY䖼O4R$SJSS^d,egl>lNrHrsuT~A,錩{đqic=fiujvxЅCS*SQT&Y^_|`bIbybekluvxy}w^j |8P\>_gkt5w ;gzS9u_f_<_ub{Feg llpx2~+ނ *JҘlNONPRVWJY^=__b?fgghQ}!~2T ,SPS\Xdg4rgwfzFRlkX^LYTg,QvdixTWYf'gkTi^UggRh]NOSbg+lO~mNabno+Tsg*E]{\[ƇnJzY|lw RY"q!r_wۗ'ai ZZQT T}fvߏYr]nQMh}}bdxj!Y[_ksv}Q2g(vgbR\$b;|~UO`} SN_QYr:6_%wS_y}3Vg󅮔Sa alvR8U/OQQ*RS[^}`acg gngms6s7u1yPՊJćYNOYN?P^|Y[^ccdfiJim nqu(zIɉ! e} a~bk2lmtmge}o#,TBojp2RZA^_gi|imjorbr{~KQmy2P-Tqkjā`gNNkhin~xU_ NNN*N1N6NzYUYPYNYZYXYbY`YgYlYiYxYYO^OYYYYYYYYZ%ZZZZ ZZ@ZlZIZ5Z6ZbZjZZZZZZZZZZZZZ[ [ [[2Z[*[6[>[C[E[@[Q[U[Z[[[e[i[p[s[u[xe[z[[[[[[[[[[[[[[[[[[\\\\ \\ \"\(\8\9\A\F\N\S\P\O[q\l\nNb\v\y\\\Y\\\\\\\\\\\\\]\] ]]]\]]]]]"]]]]L]R]N]K]l]s]v]]]]]]]]]]]]]]]]]]]]^ ^^^^^6^7^D^C^@^N^W^T^_^b^d^G^u^v^z^^^^^^^^^^^^^^^^^^^^^^^__ _]_\_ ___)_-_8_A_H_L_N_/_Q_V_W_Y_a_m_s_w____________________`_`!`````)``1```+`&``:`Z`A`j`w`_`J`F`M`c`C`d`B`l`k`Y`````````````````_````aMaa``a``aa!``a aaGa>a(a'aJa?acMdcOcccccvcccccckcicccccccccdd4ddd&d6edd(ddgdodvdNe*ddddddddddddddd ddbdde,ddddedeeee$e#e+e4e5e7e6e8uKeHeVeUeMeXe^e]erexeeeeeeeeeeeeeeeeegrf fegsf5f6f4ffOfDfIfAf^f]fdfgfhf_fbfpffffffffffffffffff?fffffgggg&g'8g.g?g6gAg8g7gFg^g`gYgcgdggpgg|gjgggggggggggggggggggggjhhFh)h@hMh2hNhh+hYhchwhhhhhhhhjhhthhhihh~ihihi"i&hi hhhhi6iihhi%hhhi(i*ii#i!hiyiwi\ixikiTi~ini9iti=iYi0iai^i]iijiiiiiiii[iiiiij.iiiiiiijjik iiijijijij jjj#jjDj jrj6jxjGjbjYjfjHj8j"jjjjjjjjjjjjjjjjjjjjkjkk1kk8k7vk9kGkCkIkPkYkTk[k_kakxkykkkkkkkkkkkkkkkkkkkkkkkkklllll$l#l^lUlbljllllll~lhlslllllllllllllllllmMm6m+m=m8mm5m3mm mcmmdmZmymYmmommnn mmmmmmmmmmmmmmmmmn-nnn.nnrn_n>n#nkn+nvnMnnCn:nNn$nnn8nnnnnnnnnnnnnnnnoAopLnnno?no1no2no>onoozoxooooo[oomoo|oXoooofooooooooooooooop p opppoppotpppp0p>p2pQpcppppppppppppq pqqqeqUqqfqbqLqVqlqqqqqqqqqqqqqqqqqqqqr rrr(r-r,r0r2r;rsNsOsWsjshspsxsus{szsssssssstttot%st2t:tUt?t_tYtAt\titptctjtvt~ttttttsttttttttttuuuu uu uuuu&u,uz7zCzWzIzazbzizpzyz}zzzzzzzzzzzzzzzzzzzzzzzzzz{{{ {{3{{{{5{({6{P{z{{M{ {L{E{u{e{t{g{p{q{l{n{{{{{{{{{{]{{{{{{{{{||{{|`|||{{|| {|#|'|*||7|+|=|L|C|T|O|@|P|X|_|d|V|e|l|u|||||||||||||||||||||;|||||}}}}} }E}K}.}2}?}5}F}s}V}N}r}h}n}O}c}}}[}}}}}}}}}}}~=}}}}}}}}}}}}}~~ ~#~!~~1~~ ~ ~"~F~f~;~5~9~C~7~2~:~g~]~V~^~Y~Z~y~j~i~|~{~}~}~~~~~~~~~~~~8:ELMNPQUTX_`higxq܀ !(?;JFRXZ_bhsrpvy}Qۀـ݀Āڀց )#/KF>SQqneft_Ɂ́сف؁ȁځ߁ )+83@YX]Z_dbhjk.qwx~߂҂ރ܃ ك5421@9PE/+#|su΃؄  " 8m*(ALONIV[Zk_lot}:A?HLNPUblxz|bȌڌ  N͍gmqsύڍ֍̍ۍˍߍ B504JGILPHYd`*cUvr|ƎŎȎˎێ  &3;9EB>LIFNW\bcdڏ!  '659OPQRI>VX^hovr}bHۑ20JVXceisrɑˑБ֑ߑۑ,^WEIdH?KPZϒD."#:5;\`|nV֓דؓÓݓГȓ6+5!:ARD[`b^j)puw}Z|~oÕ͕̕Օԕ֕ܕ!(./BLOKw\^]_frlΖ˖ɖ͉Mܗ Ֆ$*09=>DFHBI\`dfhRҗkqy|z×Ɨȗ˗ܗOzߗ 8$!7=FOKkopqtsĘØƘ !$ ,.=>BIEPKQRLUߙۙݙؙљ+7EB@C>UM[W_bedikjϚњӚԚޚߚ"#%'()*./2DCOMNQXtʛƛϛћқԛ:   .%$!0G2F>Z`gvx *&#DA?>FH]^dQPYrozĝƝϝٝӝuy}a̞ΞϞОԞܞޞݞv!,>JRTc_`afgljwrvX/iǐYtdQq~!"!    RSTUVWXYZ[\^_&2A?JRf'138B@IKSg  " $0*.(469=;CGEPLTXVZ\`^dblpjrnhtxvy}{   !%+/)57:><DHFQMUYW[]a_ecmqksoiuwz~|NNNN NNN#N$N(N+N.N/N0N5N@NANDNGNQNZN\NcNhNiNtNuNyNNNNNNNNNNNNNNNNNNNNNNOOOOO O OOOOOO.O1O`O3O5O7O9O;O>O@OBOHOIOKOLOROTOVOXO_OcOjOlOnOqOwOxOyOzO}O~OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPP P PPPPPPPPPP"P'P.P0P2P3P5P@PAPBPEPFPJPLPNPQPRPSPWPYP_P`PbPcPfPgPjPmPpPqP;PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQ Q Q QPQQQQQQQQ#Q'Q(Q,Q-Q/Q1Q3Q4Q5Q8Q9QBQJQOQSQUQWQXQ_QdQfQ~QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRR"R(R1R2R5RSBSLSKSYS[SaScSeSlSmSrSyS~SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTT!T'T(T*T/T1T4T5TCTDTGTMTOT^TbTdTfTgTiTkTmTnTtTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUU U U UUU*U+U2U5U6U;UW?WEWFWLWMWRWbWeWgWhWkWmWnWoWpWqWsWtWuWwWyWzW{W|W~WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXX WX X XXXX X&X'X-X2X9X?XIXLXMXOXPXUX_XaXdXgXhXxX|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYY Y YYYAYY!Y#Y$Y(Y/Y0Y3Y5Y6Y?YCYFYRYSYYY[Y]Y^Y_YaYcYkYmYoYrYuYvYyY{Y|YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZ Z ZZZZZ#Z$Z'Z(Z*Z-Z0ZDZEZGZHZLZPZUZ^ZcZeZgZmZwZzZ{Z~ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[4[[[[![%[-[8[A[K[L[R[V[^[h[n[o[|[}[~[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\ \\\\#\&\)\+\,\.\0\2\5\6\Y\Z\\\b\c\g\h\i\m\p\t\u\z\{\|\}\\\\\\\\\\\\\\\\\\\\\\\\\]]] ]]+]#]$]&]']1]4]9]=]?]B]C]F]H]U]Q]Y]J]_]`]a]b]d]j]m]p]y]z]~]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^ ^^^^^^ ^.^(^2^5^>^K^P^I^Q^V^X^[^\^^^h^j^k^l^m^n^p^^^^^^^^^^^^^^^^^^^^^^^^^^_________!_"_#_$_(_+_,_._0_4_6_;_=_?_@_D_E_G_M_P_T_X_[_`_c_d_g_o_r_t_u_x_z_}_~________________________________________`` ` ```````$`-`3`5`@`G`H`I`L`Q`T`V`W`]`a`g`q`~``````````````````````````````````````````aaa a aaaaaaaaaaa"a*a+a0a1a5a6a7a9aAaEaFaIa^a`alaraxa{a|aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbb b"b#b'b)b+b9b=bBbCbDbFbLbPbQbRbTbVbZb\bdbmbobsbzb}bbbbbbbbbbbbbbbbbbbbbbccc c c ccccc)c*c-c5c6c9cgEgGgHgLgTgUg]gfglgngtgvg{gggggggggggggggggggggggggggggggggghRhhhhh(h'h,h-h/h0h1h3h;h?hDhEhJhLhUhWhXh[hkhnhohphqhrhuhyhzh{h|hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhii i iiiiii1i3i5i8i;iBiEiIiNiWi[icidieifihiiilipiqirizi{iiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjjjjjjjj j$j(j0j2j4j7j;j>j?jEjFjIjJjNjPjQjRjUjVj[jdjgjjjqjsj~jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkkkkk kkkkkkk$k(k+k,k/k5k6k;k?kFkJkMkRkVkXk]k`kgkkknkpkuk}k~kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkllll l llllll&l'l(l,l.l3l5l6l:l;l?lJlKlMlOlRlTlYl[l\lklmloltlvlxlyl{llllllllllllllllllllllllllllllllmmm mmmmmm&m'm(lgm.m/m1m9mu?u@uCuGuHuNuPuRuWu^u_uauouquyuzu{u|u}u~uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvv v vvvvvvvvvvv#v%v&v)v-v2v3v5v8v9v:vwBwEwFwJwMwNwOwRwVwWw\w^w_w`wbwdwgwjwlwpwrwswtwzw}wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxx x xxxx!x"x#x-x.x0x5x7xCxDxGxHxLxNxRx\x^x`xaxcxdxhxjxnxzx~xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyxxxxxyy yyyyyy y%y'y)y-y1y4y5y;y=y?yDyEyFyJyKyOyQyTyXy[y\ygyiykyryyy{y|y~yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzz z z zzzzz!z'z+z-z/z0z4z5z8z9z:zDzEzGzHzLzUzVzYz\z]z_z`zezgzjzmzuzxz~zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{#{'{){*{+{-{.{/{0{1{4{={?{@{A{G{N{U{`{d{f{i{j{m{o{r{s{w{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|||||| | | ||||| |%|&|(|,|1|3|4|6|9|:|F|J|U|Q|R|S|Y|Z|[|\|]|^|a|c|g|i|m|n|p|r|y|||}|||||||||||||||||||||||||||||||}}}} }}}}}}}}#}&}*}-}1}<}=}>}@}A}G}H}M}Q}S}W}Y}Z}\}]}e}g}j}p}x}z}{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~}}}}}}}}}}}~~~~~~~~ ~'~(~,~-~/~3~6~?~D~E~G~N~P~R~X~_~a~b~e~k~n~o~s~x~~~~~~~~~~~~~<;=>?CDGORS[\]acdefmq}~  $&,.04579:<>@D`dfmquȀ̀πҀԀՀ׀؀  $',05:@CEMX]adeoqr{ȇɇʇ·Շևهڇ܇߇ (-.025:@BEFIORWZ[\abcknpsuz{|}ԉՉ։׉؉ "$&+,/57=>@CEGIMNSVWX\]aeguvwyz{~ÊƊȊɊʊъӊԊՊ׊݊ߊ  -07EGIKOQSTWX[]Ycdfhimsuv{~ŌƌɌˌό֌Ռٌ݌ eilnōƍǍȍʍ΍эԍՍ׍ٍ  !"#&'136789=@AKMNOT[\]^abilmopqyz{ÎĎǎώюԎ܎ !#%'(,-.4567:@ACGOQRSTUX]^eƏʏˏ͏ЏҏӏՏ ()/*,-347?CDL[]bfglpty̐ÐĐŐǐȐՐאِؐܐݐߐҐ  %"#')./14679:<=CGHOSWYZ[adgmtyz{‘Ñőӑԑבّڑޑ #$%&(./035689:<>@BCFGJMNOQXY\]`aeghinopuvwxy{|}’ÒŒƒǒȒ˒̒͒ΒВӒՒגْؒܒݒߒ !$%')*3467GHIPQRUWXZ^degijmopqstvz}ēœƓǓɓʓ˓͓̓ӓٓܓޓߓ ./1234;?=CEHJLUY\_achkmnoqrxy~ƕȕɕ˕Еѕҕӕٕڕݕޕߕ"$%&,13789:<=ARTVWXant{|~ʖ]ؖږݖޖߖ !"#(13ACJNOUWXZ[cgjnsvwx{}ėŗǗɗʗ̗͗ΗЗїԗחؗٗݗޗۗ   #&+./0235%>DGJQRSVWYZbcefjl˜ŘȘ̘"&'+123459:;<@AFGHMNTXY[\^_`Ùəәԙٙڙܙޙ  "#$'-.3568GADJKLNQTV]ÚƚȚΚКҚ՚֚ךۚܚ  &+-34579:=HKLUVW[^acefhjklmnsuwxyǛțΛЛכ؛ݛߛ "#&'()*1567=ACDEIJNOPSTVX[]^_cij\khnpruw{ /0234:?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~abcdefghijklmnopqrstuvwxyz{|}~\g@@O^@@@]?@^t@@@L@ @@@@@@ @ w@ 4@ @ @ k@(@@@_@@@@S@@@@G@@@~@;@@@r@e/@@Q@@@ \~ abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-000 000@>?00000N0000  <^"%\ & %     00;=[]00 0 0 0 0 0000 "`"f"g""4&B&@ 2 3! &&%%%%%%%%%%% ;0!!!!0"" """""*")"'"(!!""" "#"""a"R"j"k""=""5"+",!+ 0&o&m&j !%!"#$%&'()*+,-./0123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0[0\0]0^0_0`0a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0{0|0}0~00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 !"#$%&'()*+,-./012345Q6789:;<=>?@ABCDEFGHIJKLMNO%%% %%%%%,%$%4%<%%%%%%%#%3%+%;%K% %/%(%7%?%%0%%%8%B$`$a$b$c$d$e$f$g$h$i$j$k$l$m$n$o$p$q$r$s!`!a!b!c!d!e!f!g!h!i3I33"3M33'3363Q3W3 3&3#3+3J3;33333333{00!3!!222222122293~3}3|"R"a"+"."""" """5")"*NUZ?Tac(Y"uzP`cn%efhW'ebq[YІ{}b}b|[^c fhHǗgONO OMOPIVY7YZ\ `aapfipuOupy}}ÄcUzS;NNW߀xNXn8z2(/QASpTTVY_m-bpT S[p–So\zNxn&VUk;YSmftܕVBNKO SU[0_qf fhl8lm)t[vzN4[`muvʙ`iSQWX0YD[^`(cclopqqYqs?~vх`[XielZu%QY.Ye__bej*k'ksV,\l{Q\KahvraNYOSx`in)zON SNOUO=OOsRSV YZ[[yfggkLlpksyyz<{ۃwӇfV)NO\brYu;傽řNOVXJX^_`*``babbe9AffhmwppuLv}uQRYT[]ahimxˈWrmlWgΒRVT^bdhkSlWo"ooEtuvw z{|!}6f̌Qeә(N8T+\]svLw<\ TXOOSqUVhWYG[ [\^ ^~_cg:eeghhj_^0kll}uyH[cz}_w̏Z/__`hjtZxwN^NO|OPPQIQlRRRSSTTUWQWY}[T[][]]]^x^^^_`RaLbbce;ffCfgmh!hil_m*min/nu2vxlz?|}}}^}T*RLaʑuqx?M؝;R[RSTXboj_QKR;TJVz@w`sDo pu_`ښrۏkdNVWdXZZ`haffh9hmu}:nBNOPSU]o]]gltsxPWP^c+PPQgTX^Y[_ibMch=ksnp}rxx&yme}0܈ RdW(gPjQWB*X:iT]WxO\RJTd>f(ggz{V}"/h\{9SQR7[bddg-kvcLvfRN PS\q`dech_qsu#{~ۑxefkNNO:OR:SSUVXYYY[P\M^^+_`ce/[\eeegkbk{lsEyIy|}}+󉖊^ifnjܖ̘koNOtuxy: 3ꄔlP_X+z[NSWY1Z[`nou[{Prg\aJ~Q\chfeqny>}ʐnǐPR\:gSp|r5Lȓ+[_1`N;S[bKg1krsz.kRQSTj[cj9}VSTh[\1]Oabm2yy}B~MҁFrt/1KlƑNOOQESA_bglAn sc~&͒SY[my]~.|X~qQSO\f%wzQ_eiokmnodv}]uQRb@ffn^}rfRSYs^_`UdPQRS SGSTUFU1VYhYZ<[\\\\^^^_pbbbccwff f-fvg~hjj5lmn nXq d_xRbcdBb-z{}v INQHSCS`[\\]b&bGdhh4lmEmgo\qNq}ez{}~Jz9n΍xwRMUo8q6Qhy~U|VLXQ\cffiZruuyyVy|} }D4;a PRuSSP UXYOr=[\dS``c\cc?cdef]iioqNuvz|}}aIXlōpmPXaӅ5 OPtRGSs`ocIg_n,O\^e}SRQvc[X[k\ d gQ\NYY*lpQU>XY`bSg5iU@Ě(OSX[\^/_` aKb4flnހ΁Ԉ.ۛNSY'{,Lnp'SSUD[bXbblot"8o8QSSOFTYj1]zꏿhڌ7rHj=N9SXVWfbcekNmn[pwz{}=Ɔˊ[VX_>efjku7P$wW0_`efzl`uznE{u\z{Qyz6Zw@N-N[_bft6x4ZFuO^bceWgovrL̀)MP WZhisqdrXjyw)O/ReSZbglv}{|6fo r~Q{xr{{Hj^auQu`QkbnvzOpb{OVzXY䖼O4R$SJSS^d,egl>lNrHrsuT~A,錩{đqic=fiujvxЅCS*SQT&Y^_|`bIbybekluvxy}w^j |8P\>_gkt5w ;gzS9u_f_<_ub{Feg llpx2~+ނ *JҘlNONPRVWJY^=__b?fgghQ}!~2T ,SPS\Xdg4rgwfzFRlkX^LYTg,QvdixTWYf'gkTi^UggRh]NOSbg+lO~mNabno+Tsg*E]{\[ƇnJzY|lw RY"q!r_wۗ'ai ZZQT T}fvߏYr]nQMh}}bdxj!Y[_ksv}Q2g(vgbR\$b;|~UO`} SN_QYr:6_%wS_y}3Vg󅮔Sa alvR8U/OQQ*RS[^}`acg gngms6s7u1yPՊJćYNOYN?P^|Y[^ccdfiJim nqu(zIɉ! e} a~bk2lmtmge}o#,TBojp2RZA^_gi|imjorbr{~KQmy2P-Tqkjā`gNNkhin~xU_ NNN*N1N6NzYUYPYNYZYXYbY`YgYlYiYxYYO^OYYYYYYYYZ%ZZZZ ZZ@ZlZIZ5Z6ZbZjZZZZZZZZZZZZZ[ [ [[2Z[*[6[>[C[E[@[Q[U[Z[[[e[i[p[s[u[xe[z[[[[[[[[[[[[[[[[[[\\\\ \\ \"\(\8\9\A\F\N\S\P\O[q\l\nNb\v\y\\\Y\\\\\\\\\\\\\]\] ]]]\]]]]]"]]]]L]R]N]K]l]s]v]]]]]]]]]]]]]]]]]]]]^ ^^^^^6^7^D^C^@^N^W^T^_^b^d^G^u^v^z^^^^^^^^^^^^^^^^^^^^^^^__ _]_\_ ___)_-_8_A_H_L_N_/_Q_V_W_Y_a_m_s_w____________________`_`!`````)``1```+`&``:`Z`A`j`w`_`J`F`M`c`C`d`B`l`k`Y`````````````````_````aMaa``a``aa!``a aaGa>a(a'aJa?acMdcOcccccvcccccckcicccccccccdd4ddd&d6edd(ddgdodvdNe*ddddddddddddddd ddbdde,ddddedeeee$e#e+e4e5e7e6e8uKeHeVeUeMeXe^e]erexeeeeeeeeeeeeeeeeegrf fegsf5f6f4ffOfDfIfAf^f]fdfgfhf_fbfpffffffffffffffffff?fffffgggg&g'8g.g?g6gAg8g7gFg^g`gYgcgdggpgg|gjgggggggggggggggggggggjhhFh)h@hMh2hNhh+hYhchwhhhhhhhhjhhthhhihh~ihihi"i&hi hhhhi6iihhi%hhhi(i*ii#i!hiyiwi\ixikiTi~ini9iti=iYi0iai^i]iijiiiiiiii[iiiiij.iiiiiiijjik iiijijijij jjj#jjDj jrj6jxjGjbjYjfjHj8j"jjjjjjjjjjjjjjjjjjjjkjkk1kk8k7vk9kGkCkIkPkYkTk[k_kakxkykkkkkkkkkkkkkkkkkkkkkkkkklllll$l#l^lUlbljllllll~lhlslllllllllllllllllmMm6m+m=m8mm5m3mm mcmmdmZmymYmmommnn mmmmmmmmmmmmmmmmmn-nnn.nnrn_n>n#nkn+nvnMnnCn:nNn$nnn8nnnnnnnnnnnnnnnnoAopLnnno?no1no2no>onoozoxooooo[oomoo|oXoooofooooooooooooooop p opppoppotpppp0p>p2pQpcppppppppppppq pqqqeqUqqfqbqLqVqlqqqqqqqqqqqqqqqqqqqqr rrr(r-r,r0r2r;rsNsOsWsjshspsxsus{szsssssssstttot%st2t:tUt?t_tYtAt\titptctjtvt~ttttttsttttttttttuuuu uu uuuu&u,uz7zCzWzIzazbzizpzyz}zzzzzzzzzzzzzzzzzzzzzzzzzz{{{ {{3{{{{5{({6{P{z{{M{ {L{E{u{e{t{g{p{q{l{n{{{{{{{{{{]{{{{{{{{{||{{|`|||{{|| {|#|'|*||7|+|=|L|C|T|O|@|P|X|_|d|V|e|l|u|||||||||||||||||||||;|||||}}}}} }E}K}.}2}?}5}F}s}V}N}r}h}n}O}c}}}[}}}}}}}}}}}~=}}}}}}}}}}}}}~~ ~#~!~~1~~ ~ ~"~F~f~;~5~9~C~7~2~:~g~]~V~^~Y~Z~y~j~i~|~{~}~}~~~~~~~~~~~~8:ELMNPQUTX_`higxq܀ !(?;JFRXZ_bhsrpvy}Qۀـ݀Āڀց )#/KF>SQqneft_Ɂ́сف؁ȁځ߁ )+83@YX]Z_dbhjk.qwx~߂҂ރ܃ ك5421@9PE/+#|su΃؄  " 8m*(ALONIV[Zk_lot}:A?HLNPUblxz|bȌڌ  N͍gmqsύڍ֍̍ۍˍߍ B504JGILPHYd`*cUvr|ƎŎȎˎێ  &3;9EB>LIFNW\bcdڏ!  '659OPQRI>VX^hovr}bHۑ20JVXceisrɑˑБ֑ߑۑ,^WEIdH?KPZϒD."#:5;\`|nV֓דؓÓݓГȓ6+5!:ARD[`b^j)puw}Z|~oÕ͕̕Օԕ֕ܕ!(./BLOKw\^]_frlΖ˖ɖ͉Mܗ Ֆ$*09=>DFHBI\`dfhRҗkqy|z×Ɨȗ˗ܗOzߗ 8$!7=FOKkopqtsĘØƘ !$ ,.=>BIEPKQRLUߙۙݙؙљ+7EB@C>UM[W_bedikjϚњӚԚޚߚ"#%'()*./2DCOMNQXtʛƛϛћқԛ:   .%$!0G2F>Z`gvx *&#DA?>FH]^dQPYrozĝƝϝٝӝuy}a̞ΞϞОԞܞޞݞv!,>JRTc_`afgljwrvX/iǐYtdQq~HOpf1hȒf_EN(NNOOO9OVOOOOOP@P"OPPFPpPBPPPQJQdQQQRRRRRSSS$SrSSSTTTTUWYWeWWWXXY YSY[Y]YcYY[V[u/[[\\\\]']S]B]m]]]_!_4_g__`]````a `aa7a0abbcd`ddeNfff;f f.ff$fefWfYfsfffffg)gfghRghhDhihiij0jkjFjsj~jjkl?l\llolmmmommmmmmn9n\n'n?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~abcdefghijklmnopqrstuvwxyz{|}~\@@OL@@^@c@ @@@W@@@@ K@ @ @ @ ?@ @ @v@3@@@j@'@@@^@@@@R@@@@F@@e\~ abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'000 000@>?00000N0000  \0 \ & %     00;=[]00 0 0 0 0 0000 ""`"f"g""4&B&@ 2 3! &&%%%%%%%%%%% ;0!!!!0"" """""*")"'"(!!""" "#"""a"R"j"k""=""5"+",!+ 0&o&m&j !%!"#$%&'()*+,-./0123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0[0\0]0^0_0`0a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0{0|0}0~00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 !"#$%&'()*+,-./012345Q6789:;<=>?@ABCDEFGHIJKLMNO%%% %%%%%,%$%4%<%%%%%%%#%3%+%;%K% %/%(%7%?%%0%%%8%BNUZ?Tac(Y"uzP`cn%efhW'ebq[YІ{}b}b|[^c fhHǗgONO OMOPIVY7YZ\ `aapfipuOupy}}ÄcUzS;NNW߀xNXn8z2(/QASpTTVY_m-bpT S[p–So\zNxn&VUk;YSmftܕVBNKO SU[0_qf fhl8lm)t[vzN4[`muvʙ`iSQWX0YD[^`(cclopqqYqs?~vх`[XielZu%QY.Ye__bej*k'ksV,\l{Q\KahvraNYOSx`in)zON SNOUO=OOsRSV YZ[[yfggkLlpksyyz<{ۃwӇfV)NO\brYu;傽řNOVXJX^_`*``babbe9AffhmwppuLv}uQRYT[]ahimxˈWrmlWgΒRVT^bdhkSlWo"ooEtuvw z{|!}6f̌Qeә(N8T+\]svLw<\ TXOOSqUVhWYG[ [\^ ^~_cg:eeghhj_^0kll}uyH[cz}_w̏Z/__`hjtZxwN^NO|OPPQIQlRRRSSTTUWQWY}[T[][]]]^x^^^_`RaLbbce;ffCfgmh!hil_m*min/nu2vxlz?|}}}^}T*RLaʑuqx?M؝;R[RSTXboj_QKR;TJVz@w`sDo pu_`ښrۏkdNVWdXZZ`haffh9hmu}:nBNOPSU]o]]gltsxPWP^c+PPQgTX^Y[_ibMch=ksnp}rxx&yme}0܈ RdW(gPjQWB*X:iT]WxO\RJTd>f(ggz{V}"/h\{9SQR7[bddg-kvcLvfRN PS\q`dech_qsu#{~ۑxefkNNO:OR:SSUVXYYY[P\M^^+_`ce/[\eeegkbk{lsEyIy|}}+󉖊^ifnjܖ̘koNOtuxy: 3ꄔlP_X+z[NSWY1Z[`nou[{Prg\aJ~Q\chfeqny>}ʐnǐPR\:gSp|r5Lȓ+[_1`N;S[bKg1krsz.kRQSTj[cj9}VSTh[\1]Oabm2yy}B~MҁFrt/1KlƑNOOQESA_bglAn sc~&͒SY[my]~.|X~qQSO\f%wzQ_eiokmnodv}]uQRb@ffn^}rfRSYs^_`UdPQRS SGSTUFU1VYhYZ<[\\\\^^^_pbbbccwff f-fvg~hjj5lmn nXq d_xRbcdBb-z{}v INQHSCS`[\\]b&bGdhh4lmEmgo\qNq}ez{}~Jz9n΍xwRMUo8q6Qhy~U|VLXQ\cffiZruuyyVy|} }D4;a PRuSSP UXYOr=[\dS``c\cc?cdef]iioqNuvz|}}aIXlōpmPXaӅ5 OPtRGSs`ocIg_n,O\^e}SRQvc[X[k\ d gQ\NYY*lpQU>XY`bSg5iU@Ě(OSX[\^/_` aKb4flnހ΁Ԉ.ۛNSY'{,Lnp'SSUD[bXbblot"8o8QSSOFTYj1]zꏿhڌ7rHj=N9SXVWfbcekNmn[pwz{}=Ɔˊ[VX_>efjku7P$wW0_`efzl`uznE{u\z{Qyz6Zw@N-N[_bft6x4ZFuO^bceWgovrL̀)MP WZhisqdrXjyw)O/ReSZbglv}{|6fo r~Q{xr{{Hj^auQu`QkbnvzOpb{OVzXY䖼O4R$SJSS^d,egl>lNrHrsuT~A,錩{đqic=fiujvxЅCS*SQT&Y^_|`bIbybekluvxy}w^j |8P\>_gkt5w ;gzS9u_f_<_ub{Feg llpx2~+ނ *JҘlNONPRVWJY^=__b?fgghQ}!~2T ,SPS\Xdg4rgwfzFRlkX^LYTg,QvdixTWYf'gkTi^UggRh]NOSbg+lO~mNabno+Tsg*E]{\[ƇnJzY|lw RY"q!r_wۗ'ai ZZQT T}fvߏYr]nQMh}}bdxj!Y[_ksv}Q2g(vgbR\$b;|~UO`} SN_QYr:6_%wS_y}3Vg󅮔Sa alvR8U/OQQ*RS[^}`acg gngms6s7u1yPՊJćYNOYN?P^|Y[^ccdfiJim nqu(zIɉ! e} a~bk2lmtmge}o#,TBojp2RZA^_gi|imjorbr{~KQmy2P-Tqkjā`gNNkhin~xU_ NNN*N1N6NzYUYPYNYZYXYbY`YgYlYiYxYYO^OYYYYYYYYZ%ZZZZ ZZ@ZlZIZ5Z6ZbZjZZZZZZZZZZZZZ[ [ [[2Z[*[6[>[C[E[@[Q[U[Z[[[e[i[p[s[u[xe[z[[[[[[[[[[[[[[[[[[\\\\ \\ \"\(\8\9\A\F\N\S\P\O[q\l\nNb\v\y\\\Y\\\\\\\\\\\\\]\] ]]]\]]]]]"]]]]L]R]N]K]l]s]v]]]]]]]]]]]]]]]]]]]]^ ^^^^^6^7^D^C^@^N^W^T^_^b^d^G^u^v^z^^^^^^^^^^^^^^^^^^^^^^^__ _]_\_ ___)_-_8_A_H_L_N_/_Q_V_W_Y_a_m_s_w____________________`_`!`````)``1```+`&``:`Z`A`j`w`_`J`F`M`c`C`d`B`l`k`Y`````````````````_````aMaa``a``aa!``a aaGa>a(a'aJa?acMdcOcccccvcccccckcicccccccccdd4ddd&d6edd(ddgdodvdNe*ddddddddddddddd ddbdde,ddddedeeee$e#e+e4e5e7e6e8uKeHeVeUeMeXe^e]erexeeeeeeeeeeeeeeeeegrf fegsf5f6f4ffOfDfIfAf^f]fdfgfhf_fbfpffffffffffffffffff?fffffgggg&g'8g.g?g6gAg8g7gFg^g`gYgcgdggpgg|gjgggggggggggggggggggggjhhFh)h@hMh2hNhh+hYhchwhhhhhhhhjhhthhhihh~ihihi"i&hi hhhhi6iihhi%hhhi(i*ii#i!hiyiwi\ixikiTi~ini9iti=iYi0iai^i]iijiiiiiiii[iiiiij.iiiiiiijjik iiijijijij jjj#jjDj jrj6jxjGjbjYjfjHj8j"jjjjjjjjjjjjjjjjjjjjkjkk1kk8k7vk9kGkCkIkPkYkTk[k_kakxkykkkkkkkkkkkkkkkkkkkkkkkkklllll$l#l^lUlbljllllll~lhlslllllllllllllllllmMm6m+m=m8mm5m3mm mcmmdmZmymYmmommnn mmmmmmmmmmmmmmmmmn-nnn.nnrn_n>n#nkn+nvnMnnCn:nNn$nnn8nnnnnnnnnnnnnnnnoAopLnnno?no1no2no>onoozoxooooo[oomoo|oXoooofooooooooooooooop p opppoppotpppp0p>p2pQpcppppppppppppq pqqqeqUqqfqbqLqVqlqqqqqqqqqqqqqqqqqqqqr rrr(r-r,r0r2r;rsNsOsWsjshspsxsus{szsssssssstttot%st2t:tUt?t_tYtAt\titptctjtvt~ttttttsttttttttttuuuu uu uuuu&u,uz7zCzWzIzazbzizpzyz}zzzzzzzzzzzzzzzzzzzzzzzzzz{{{ {{3{{{{5{({6{P{z{{M{ {L{E{u{e{t{g{p{q{l{n{{{{{{{{{{]{{{{{{{{{||{{|`|||{{|| {|#|'|*||7|+|=|L|C|T|O|@|P|X|_|d|V|e|l|u|||||||||||||||||||||;|||||}}}}} }E}K}.}2}?}5}F}s}V}N}r}h}n}O}c}}}[}}}}}}}}}}}~=}}}}}}}}}}}}}~~ ~#~!~~1~~ ~ ~"~F~f~;~5~9~C~7~2~:~g~]~V~^~Y~Z~y~j~i~|~{~}~}~~~~~~~~~~~~8:ELMNPQUTX_`higxq܀ !(?;JFRXZ_bhsrpvy}Qۀـ݀Āڀց )#/KF>SQqneft_Ɂ́сف؁ȁځ߁ )+83@YX]Z_dbhjk.qwx~߂҂ރ܃ ك5421@9PE/+#|su΃؄  " 8m*(ALONIV[Zk_lot}:A?HLNPUblxz|bȌڌ  N͍gmqsύڍ֍̍ۍˍߍ B504JGILPHYd`*cUvr|ƎŎȎˎێ  &3;9EB>LIFNW\bcdڏ!  '659OPQRI>VX^hovr}bHۑ20JVXceisrɑˑБ֑ߑۑ,^WEIdH?KPZϒD."#:5;\`|nV֓דؓÓݓГȓ6+5!:ARD[`b^j)puw}Z|~oÕ͕̕Օԕ֕ܕ!(./BLOKw\^]_frlΖ˖ɖ͉Mܗ Ֆ$*09=>DFHBI\`dfhRҗkqy|z×Ɨȗ˗ܗOzߗ 8$!7=FOKkopqtsĘØƘ !$ ,.=>BIEPKQRLUߙۙݙؙљ+7EB@C>UM[W_bedikjϚњӚԚޚߚ"#%'()*./2DCOMNQXtʛƛϛћқԛ:   .%$!0G2F>Z`gvx *&#DA?>FH]^dQPYrozĝƝϝٝӝuy}a̞ΞϞОԞܞޞݞv!,>JRTc_`afgljwrvX/iǐYtdQqXML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS/Encodings/x-sjis-jisx0221.enc000644 000765 000024 00000043432 11254652014 025504 0ustar00pcimprichstaff000000 000000 x-sjis-jisx0221(%  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|} >abcdefghijklmnopqrstuvwxyz{|}~\@@OL@@^@c@ @@@W@@@@ K@ @ @ @ ?@ @ @v@3@@@j@'@@@^@@@@R@@@@F@@e > abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'000 000@>?00000N0000  \0 \ & %     00;=[]00 0 0 0 0 0000 ""`"f"g""4&B&@ 2 3! &&%%%%%%%%%%% ;0!!!!0"" """""*")"'"(!!""" "#"""a"R"j"k""=""5"+",!+ 0&o&m&j !%!"#$%&'()*+,-./0123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0[0\0]0^0_0`0a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0{0|0}0~00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 !"#$%&'()*+,-./012345Q6789:;<=>?@ABCDEFGHIJKLMNO%%% %%%%%,%$%4%<%%%%%%%#%3%+%;%K% %/%(%7%?%%0%%%8%BNUZ?Tac(Y"uzP`cn%efhW'ebq[YІ{}b}b|[^c fhHǗgONO OMOPIVY7YZ\ `aapfipuOupy}}ÄcUzS;NNW߀xNXn8z2(/QASpTTVY_m-bpT S[p–So\zNxn&VUk;YSmftܕVBNKO SU[0_qf fhl8lm)t[vzN4[`muvʙ`iSQWX0YD[^`(cclopqqYqs?~vх`[XielZu%QY.Ye__bej*k'ksV,\l{Q\KahvraNYOSx`in)zON SNOUO=OOsRSV YZ[[yfggkLlpksyyz<{ۃwӇfV)NO\brYu;傽řNOVXJX^_`*``babbe9AffhmwppuLv}uQRYT[]ahimxˈWrmlWgΒRVT^bdhkSlWo"ooEtuvw z{|!}6f̌Qeә(N8T+\]svLw<\ TXOOSqUVhWYG[ [\^ ^~_cg:eeghhj_^0kll}uyH[cz}_w̏Z/__`hjtZxwN^NO|OPPQIQlRRRSSTTUWQWY}[T[][]]]^x^^^_`RaLbbce;ffCfgmh!hil_m*min/nu2vxlz?|}}}^}T*RLaʑuqx?M؝;R[RSTXboj_QKR;TJVz@w`sDo pu_`ښrۏkdNVWdXZZ`haffh9hmu}:nBNOPSU]o]]gltsxPWP^c+PPQgTX^Y[_ibMch=ksnp}rxx&yme}0܈ RdW(gPjQWB*X:iT]WxO\RJTd>f(ggz{V}"/h\{9SQR7[bddg-kvcLvfRN PS\q`dech_qsu#{~ۑxefkNNO:OR:SSUVXYYY[P\M^^+_`ce/[\eeegkbk{lsEyIy|}}+󉖊^ifnjܖ̘koNOtuxy: 3ꄔlP_X+z[NSWY1Z[`nou[{Prg\aJ~Q\chfeqny>}ʐnǐPR\:gSp|r5Lȓ+[_1`N;S[bKg1krsz.kRQSTj[cj9}VSTh[\1]Oabm2yy}B~MҁFrt/1KlƑNOOQESA_bglAn sc~&͒SY[my]~.|X~qQSO\f%wzQ_eiokmnodv}]uQRb@ffn^}rfRSYs^_`UdPQRS SGSTUFU1VYhYZ<[\\\\^^^_pbbbccwff f-fvg~hjj5lmn nXq d_xRbcdBb-z{}v INQHSCS`[\\]b&bGdhh4lmEmgo\qNq}ez{}~Jz9n΍xwRMUo8q6Qhy~U|VLXQ\cffiZruuyyVy|} }D4;a PRuSSP UXYOr=[\dS``c\cc?cdef]iioqNuvz|}}aIXlōpmPXaӅ5 OPtRGSs`ocIg_n,O\^e}SRQvc[X[k\ d gQ\NYY*lpQU>XY`bSg5iU@Ě(OSX[\^/_` aKb4flnހ΁Ԉ.ۛNSY'{,Lnp'SSUD[bXbblot"8o8QSSOFTYj1]zꏿhڌ7rHj=N9SXVWfbcekNmn[pwz{}=Ɔˊ[VX_>efjku7P$wW0_`efzl`uznE{u\z{Qyz6Zw@N-N[_bft6x4ZFuO^bceWgovrL̀)MP WZhisqdrXjyw)O/ReSZbglv}{|6fo r~Q{xr{{Hj^auQu`QkbnvzOpb{OVzXY䖼O4R$SJSS^d,egl>lNrHrsuT~A,錩{đqic=fiujvxЅCS*SQT&Y^_|`bIbybekluvxy}w^j |8P\>_gkt5w ;gzS9u_f_<_ub{Feg llpx2~+ނ *JҘlNONPRVWJY^=__b?fgghQ}!~2T ,SPS\Xdg4rgwfzFRlkX^LYTg,QvdixTWYf'gkTi^UggRh]NOSbg+lO~mNabno+Tsg*E]{\[ƇnJzY|lw RY"q!r_wۗ'ai ZZQT T}fvߏYr]nQMh}}bdxj!Y[_ksv}Q2g(vgbR\$b;|~UO`} SN_QYr:6_%wS_y}3Vg󅮔Sa alvR8U/OQQ*RS[^}`acg gngms6s7u1yPՊJćYNOYN?P^|Y[^ccdfiJim nqu(zIɉ! e} a~bk2lmtmge}o#,TBojp2RZA^_gi|imjorbr{~KQmy2P-Tqkjā`gNNkhin~xU_ NNN*N1N6NzYUYPYNYZYXYbY`YgYlYiYxYYO^OYYYYYYYYZ%ZZZZ ZZ@ZlZIZ5Z6ZbZjZZZZZZZZZZZZZ[ [ [[2Z[*[6[>[C[E[@[Q[U[Z[[[e[i[p[s[u[xe[z[[[[[[[[[[[[[[[[[[\\\\ \\ \"\(\8\9\A\F\N\S\P\O[q\l\nNb\v\y\\\Y\\\\\\\\\\\\\]\] ]]]\]]]]]"]]]]L]R]N]K]l]s]v]]]]]]]]]]]]]]]]]]]]^ ^^^^^6^7^D^C^@^N^W^T^_^b^d^G^u^v^z^^^^^^^^^^^^^^^^^^^^^^^__ _]_\_ ___)_-_8_A_H_L_N_/_Q_V_W_Y_a_m_s_w____________________`_`!`````)``1```+`&``:`Z`A`j`w`_`J`F`M`c`C`d`B`l`k`Y`````````````````_````aMaa``a``aa!``a aaGa>a(a'aJa?acMdcOcccccvcccccckcicccccccccdd4ddd&d6edd(ddgdodvdNe*ddddddddddddddd ddbdde,ddddedeeee$e#e+e4e5e7e6e8uKeHeVeUeMeXe^e]erexeeeeeeeeeeeeeeeeegrf fegsf5f6f4ffOfDfIfAf^f]fdfgfhf_fbfpffffffffffffffffff?fffffgggg&g'8g.g?g6gAg8g7gFg^g`gYgcgdggpgg|gjgggggggggggggggggggggjhhFh)h@hMh2hNhh+hYhchwhhhhhhhhjhhthhhihh~ihihi"i&hi hhhhi6iihhi%hhhi(i*ii#i!hiyiwi\ixikiTi~ini9iti=iYi0iai^i]iijiiiiiiii[iiiiij.iiiiiiijjik iiijijijij jjj#jjDj jrj6jxjGjbjYjfjHj8j"jjjjjjjjjjjjjjjjjjjjkjkk1kk8k7vk9kGkCkIkPkYkTk[k_kakxkykkkkkkkkkkkkkkkkkkkkkkkkklllll$l#l^lUlbljllllll~lhlslllllllllllllllllmMm6m+m=m8mm5m3mm mcmmdmZmymYmmommnn mmmmmmmmmmmmmmmmmn-nnn.nnrn_n>n#nkn+nvnMnnCn:nNn$nnn8nnnnnnnnnnnnnnnnoAopLnnno?no1no2no>onoozoxooooo[oomoo|oXoooofooooooooooooooop p opppoppotpppp0p>p2pQpcppppppppppppq pqqqeqUqqfqbqLqVqlqqqqqqqqqqqqqqqqqqqqr rrr(r-r,r0r2r;rsNsOsWsjshspsxsus{szsssssssstttot%st2t:tUt?t_tYtAt\titptctjtvt~ttttttsttttttttttuuuu uu uuuu&u,uz7zCzWzIzazbzizpzyz}zzzzzzzzzzzzzzzzzzzzzzzzzz{{{ {{3{{{{5{({6{P{z{{M{ {L{E{u{e{t{g{p{q{l{n{{{{{{{{{{]{{{{{{{{{||{{|`|||{{|| {|#|'|*||7|+|=|L|C|T|O|@|P|X|_|d|V|e|l|u|||||||||||||||||||||;|||||}}}}} }E}K}.}2}?}5}F}s}V}N}r}h}n}O}c}}}[}}}}}}}}}}}~=}}}}}}}}}}}}}~~ ~#~!~~1~~ ~ ~"~F~f~;~5~9~C~7~2~:~g~]~V~^~Y~Z~y~j~i~|~{~}~}~~~~~~~~~~~~8:ELMNPQUTX_`higxq܀ !(?;JFRXZ_bhsrpvy}Qۀـ݀Āڀց )#/KF>SQqneft_Ɂ́сف؁ȁځ߁ )+83@YX]Z_dbhjk.qwx~߂҂ރ܃ ك5421@9PE/+#|su΃؄  " 8m*(ALONIV[Zk_lot}:A?HLNPUblxz|bȌڌ  N͍gmqsύڍ֍̍ۍˍߍ B504JGILPHYd`*cUvr|ƎŎȎˎێ  &3;9EB>LIFNW\bcdڏ!  '659OPQRI>VX^hovr}bHۑ20JVXceisrɑˑБ֑ߑۑ,^WEIdH?KPZϒD."#:5;\`|nV֓דؓÓݓГȓ6+5!:ARD[`b^j)puw}Z|~oÕ͕̕Օԕ֕ܕ!(./BLOKw\^]_frlΖ˖ɖ͉Mܗ Ֆ$*09=>DFHBI\`dfhRҗkqy|z×Ɨȗ˗ܗOzߗ 8$!7=FOKkopqtsĘØƘ !$ ,.=>BIEPKQRLUߙۙݙؙљ+7EB@C>UM[W_bedikjϚњӚԚޚߚ"#%'()*./2DCOMNQXtʛƛϛћқԛ:   .%$!0G2F>Z`gvx *&#DA?>FH]^dQPYrozĝƝϝٝӝuy}a̞ΞϞОԞܞޞݞv!,>JRTc_`afgljwrvX/iǐYtdQqXML-SAX-ExpatXS-1.33/lib/XML/SAX/ExpatXS/Encodings/x-sjis-unicode.enc000644 000765 000024 00000043432 11254652014 025650 0ustar00pcimprichstaff000000 000000 x-sjis-unicode(%  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|} >abcdefghijklmnopqrstuvwxyz{|}~\@@OL@@^@c@ @@@W@@@@ K@ @ @ @ ?@ @ @v@3@@@j@'@@@^@@@@R@@@@F@@e > abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'000 000@>?00000N0000  \0 \ & %     00;=[]00 0 0 0 0 0000 ""`"f"g""4&B&@ 2 3! &&%%%%%%%%%%% ;0!!!!0"" """""*")"'"(!!""" "#"""a"R"j"k""=""5"+",!+ 0&o&m&j !%!"#$%&'()*+,-./0123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z0[0\0]0^0_0`0a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0{0|0}0~00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 !"#$%&'()*+,-./012345Q6789:;<=>?@ABCDEFGHIJKLMNO%%% %%%%%,%$%4%<%%%%%%%#%3%+%;%K% %/%(%7%?%%0%%%8%BNUZ?Tac(Y"uzP`cn%efhW'ebq[YІ{}b}b|[^c fhHǗgONO OMOPIVY7YZ\ `aapfipuOupy}}ÄcUzS;NNW߀xNXn8z2(/QASpTTVY_m-bpT S[p–So\zNxn&VUk;YSmftܕVBNKO SU[0_qf fhl8lm)t[vzN4[`muvʙ`iSQWX0YD[^`(cclopqqYqs?~vх`[XielZu%QY.Ye__bej*k'ksV,\l{Q\KahvraNYOSx`in)zON SNOUO=OOsRSV YZ[[yfggkLlpksyyz<{ۃwӇfV)NO\brYu;傽řNOVXJX^_`*``babbe9AffhmwppuLv}uQRYT[]ahimxˈWrmlWgΒRVT^bdhkSlWo"ooEtuvw z{|!}6f̌Qeә(N8T+\]svLw<\ TXOOSqUVhWYG[ [\^ ^~_cg:eeghhj_^0kll}uyH[cz}_w̏Z/__`hjtZxwN^NO|OPPQIQlRRRSSTTUWQWY}[T[][]]]^x^^^_`RaLbbce;ffCfgmh!hil_m*min/nu2vxlz?|}}}^}T*RLaʑuqx?M؝;R[RSTXboj_QKR;TJVz@w`sDo pu_`ښrۏkdNVWdXZZ`haffh9hmu}:nBNOPSU]o]]gltsxPWP^c+PPQgTX^Y[_ibMch=ksnp}rxx&yme}0܈ RdW(gPjQWB*X:iT]WxO\RJTd>f(ggz{V}"/h\{9SQR7[bddg-kvcLvfRN PS\q`dech_qsu#{~ۑxefkNNO:OR:SSUVXYYY[P\M^^+_`ce/[\eeegkbk{lsEyIy|}}+󉖊^ifnjܖ̘koNOtuxy: 3ꄔlP_X+z[NSWY1Z[`nou[{Prg\aJ~Q\chfeqny>}ʐnǐPR\:gSp|r5Lȓ+[_1`N;S[bKg1krsz.kRQSTj[cj9}VSTh[\1]Oabm2yy}B~MҁFrt/1KlƑNOOQESA_bglAn sc~&͒SY[my]~.|X~qQSO\f%wzQ_eiokmnodv}]uQRb@ffn^}rfRSYs^_`UdPQRS SGSTUFU1VYhYZ<[\\\\^^^_pbbbccwff f-fvg~hjj5lmn nXq d_xRbcdBb-z{}v INQHSCS`[\\]b&bGdhh4lmEmgo\qNq}ez{}~Jz9n΍xwRMUo8q6Qhy~U|VLXQ\cffiZruuyyVy|} }D4;a PRuSSP UXYOr=[\dS``c\cc?cdef]iioqNuvz|}}aIXlōpmPXaӅ5 OPtRGSs`ocIg_n,O\^e}SRQvc[X[k\ d gQ\NYY*lpQU>XY`bSg5iU@Ě(OSX[\^/_` aKb4flnހ΁Ԉ.ۛNSY'{,Lnp'SSUD[bXbblot"8o8QSSOFTYj1]zꏿhڌ7rHj=N9SXVWfbcekNmn[pwz{}=Ɔˊ[VX_>efjku7P$wW0_`efzl`uznE{u\z{Qyz6Zw@N-N[_bft6x4ZFuO^bceWgovrL̀)MP WZhisqdrXjyw)O/ReSZbglv}{|6fo r~Q{xr{{Hj^auQu`QkbnvzOpb{OVzXY䖼O4R$SJSS^d,egl>lNrHrsuT~A,錩{đqic=fiujvxЅCS*SQT&Y^_|`bIbybekluvxy}w^j |8P\>_gkt5w ;gzS9u_f_<_ub{Feg llpx2~+ނ *JҘlNONPRVWJY^=__b?fgghQ}!~2T ,SPS\Xdg4rgwfzFRlkX^LYTg,QvdixTWYf'gkTi^UggRh]NOSbg+lO~mNabno+Tsg*E]{\[ƇnJzY|lw RY"q!r_wۗ'ai ZZQT T}fvߏYr]nQMh}}bdxj!Y[_ksv}Q2g(vgbR\$b;|~UO`} SN_QYr:6_%wS_y}3Vg󅮔Sa alvR8U/OQQ*RS[^}`acg gngms6s7u1yPՊJćYNOYN?P^|Y[^ccdfiJim nqu(zIɉ! e} a~bk2lmtmge}o#,TBojp2RZA^_gi|imjorbr{~KQmy2P-Tqkjā`gNNkhin~xU_ NNN*N1N6NzYUYPYNYZYXYbY`YgYlYiYxYYO^OYYYYYYYYZ%ZZZZ ZZ@ZlZIZ5Z6ZbZjZZZZZZZZZZZZZ[ [ [[2Z[*[6[>[C[E[@[Q[U[Z[[[e[i[p[s[u[xe[z[[[[[[[[[[[[[[[[[[\\\\ \\ \"\(\8\9\A\F\N\S\P\O[q\l\nNb\v\y\\\Y\\\\\\\\\\\\\]\] ]]]\]]]]]"]]]]L]R]N]K]l]s]v]]]]]]]]]]]]]]]]]]]]^ ^^^^^6^7^D^C^@^N^W^T^_^b^d^G^u^v^z^^^^^^^^^^^^^^^^^^^^^^^__ _]_\_ ___)_-_8_A_H_L_N_/_Q_V_W_Y_a_m_s_w____________________`_`!`````)``1```+`&``:`Z`A`j`w`_`J`F`M`c`C`d`B`l`k`Y`````````````````_````aMaa``a``aa!``a aaGa>a(a'aJa?acMdcOcccccvcccccckcicccccccccdd4ddd&d6edd(ddgdodvdNe*ddddddddddddddd ddbdde,ddddedeeee$e#e+e4e5e7e6e8uKeHeVeUeMeXe^e]erexeeeeeeeeeeeeeeeeegrf fegsf5f6f4ffOfDfIfAf^f]fdfgfhf_fbfpffffffffffffffffff?fffffgggg&g'8g.g?g6gAg8g7gFg^g`gYgcgdggpgg|gjgggggggggggggggggggggjhhFh)h@hMh2hNhh+hYhchwhhhhhhhhjhhthhhihh~ihihi"i&hi hhhhi6iihhi%hhhi(i*ii#i!hiyiwi\ixikiTi~ini9iti=iYi0iai^i]iijiiiiiiii[iiiiij.iiiiiiijjik iiijijijij jjj#jjDj jrj6jxjGjbjYjfjHj8j"jjjjjjjjjjjjjjjjjjjjkjkk1kk8k7vk9kGkCkIkPkYkTk[k_kakxkykkkkkkkkkkkkkkkkkkkkkkkkklllll$l#l^lUlbljllllll~lhlslllllllllllllllllmMm6m+m=m8mm5m3mm mcmmdmZmymYmmommnn mmmmmmmmmmmmmmmmmn-nnn.nnrn_n>n#nkn+nvnMnnCn:nNn$nnn8nnnnnnnnnnnnnnnnoAopLnnno?no1no2no>onoozoxooooo[oomoo|oXoooofooooooooooooooop p opppoppotpppp0p>p2pQpcppppppppppppq pqqqeqUqqfqbqLqVqlqqqqqqqqqqqqqqqqqqqqr rrr(r-r,r0r2r;rsNsOsWsjshspsxsus{szsssssssstttot%st2t:tUt?t_tYtAt\titptctjtvt~ttttttsttttttttttuuuu uu uuuu&u,uz7zCzWzIzazbzizpzyz}zzzzzzzzzzzzzzzzzzzzzzzzzz{{{ {{3{{{{5{({6{P{z{{M{ {L{E{u{e{t{g{p{q{l{n{{{{{{{{{{]{{{{{{{{{||{{|`|||{{|| {|#|'|*||7|+|=|L|C|T|O|@|P|X|_|d|V|e|l|u|||||||||||||||||||||;|||||}}}}} }E}K}.}2}?}5}F}s}V}N}r}h}n}O}c}}}[}}}}}}}}}}}~=}}}}}}}}}}}}}~~ ~#~!~~1~~ ~ ~"~F~f~;~5~9~C~7~2~:~g~]~V~^~Y~Z~y~j~i~|~{~}~}~~~~~~~~~~~~8:ELMNPQUTX_`higxq܀ !(?;JFRXZ_bhsrpvy}Qۀـ݀Āڀց )#/KF>SQqneft_Ɂ́сف؁ȁځ߁ )+83@YX]Z_dbhjk.qwx~߂҂ރ܃ ك5421@9PE/+#|su΃؄  " 8m*(ALONIV[Zk_lot}:A?HLNPUblxz|bȌڌ  N͍gmqsύڍ֍̍ۍˍߍ B504JGILPHYd`*cUvr|ƎŎȎˎێ  &3;9EB>LIFNW\bcdڏ!  '659OPQRI>VX^hovr}bHۑ20JVXceisrɑˑБ֑ߑۑ,^WEIdH?KPZϒD."#:5;\`|nV֓דؓÓݓГȓ6+5!:ARD[`b^j)puw}Z|~oÕ͕̕Օԕ֕ܕ!(./BLOKw\^]_frlΖ˖ɖ͉Mܗ Ֆ$*09=>DFHBI\`dfhRҗkqy|z×Ɨȗ˗ܗOzߗ 8$!7=FOKkopqtsĘØƘ !$ ,.=>BIEPKQRLUߙۙݙؙљ+7EB@C>UM[W_bedikjϚњӚԚޚߚ"#%'()*./2DCOMNQXtʛƛϛћқԛ:   .%$!0G2F>Z`gvx *&#DA?>FH]^dQPYrozĝƝϝٝӝuy}a̞ΞϞОԞܞޞݞv!,>JRTc_`afgljwrvX/iǐYtdQq